Asp.net-Mvc-Routing
MVC 5 路由和可選參數
我有以下控制器和路由定義
[System.Web.Mvc.Route("users/{firstName?}/{lastName?}/{emailAddress?}/{pageSize:int=10}/{pageNumber:int=1}", Name = RouteNames.User_Listing)] public ActionResult Index(string firstName = null, string lastName = null, string emailAddress = null, int pageNumber = 1, int pageSize = 10)我想要的是這些中的任何一個都是未定義或定義的,所以所有這些都是有效的
users/first/last/email users/last/email/30/2 users/last/1 users問題是,MVC 如何知道指定了哪些參數?它沒有!
當我有這個連結
@Html.RouteLink("Maintain Users", RouteNames.User_Listing)它不會導航到此操作方法。我該怎麼辦?
你是對的,MVC 不會知道哪個(除了最左邊的參數是“最需要的”)。也就是說,你不能在
{email}沒有先指定的情況下指定{firstName?}/{lastName?}/.但是,您可以將其綁定以匹配不同的格式,但請記住,第一個匹配MVC 發現它將執行(如果這意味著
emailAddress將firstName它的參數匹配*@*.*(或一些傳真)以避免這種情況)。我會重新評估您希望路由的方式,或者考慮將基本資訊放入 url(分頁),並將可選參數保留為查詢字元串值。例如
users/30/2?firstName=___&lastName=___ users/30/2?emailAddress=___&lastName=___ users/30/2?firstName=___&emailAddress=____&lastName=___
您只需要為此操作指定多個屬性:
[Route("users/{firstName?}")] [Route("users/{firstName}/{lastName?}")] [Route("users/{firstName}/{lastName}/{emailAddress?}")] ...