我正试图在ASP.NET web应用程序中捕获多个可选参数。当我在RegisterArea()
中定义MapRoute
时,它破坏了Html.ActionLink()
方法。
以下代码有效:
Public Overrides Sub RegisterArea(ByVal context As System.Web.Mvc.AreaRegistrationContext)
context.MapRoute( _
"Register_default", _
"Register/{controller}/{action}/{id1}", _
New With {.controller = "Home", .action = "Index", .id1 = UrlParameter.Optional} _
)
End Sub
但是,当我修改URL以包含多个可选参数(如下)时,它会导致我的所有Html.ActionLink()
方法都创建具有空href的锚标记。有人能告诉我发生这种事的原因吗?
Public Overrides Sub RegisterArea(ByVal context As System.Web.Mvc.AreaRegistrationContext)
context.MapRoute( _
"Register_default", _
"Register/{controller}/{action}/{id1}/{id2}/{id3}/{id4}", _
New With {.controller = "Home", .action = "Index", .id1 = UrlParameter.Optional, .id2 = UrlParameter.Optional, .id3 = UrlParameter.Optional, .id4 = UrlParameter.Optional} _
)
End Sub
这是MVC3/System.Web.Routing:中的一个错误
http://haacked.com/archive/2011/02/20/routing-regression-with-two-consecutive-optional-url-parameters.aspx
我认为你不可能有一个有几个可选参数的路由,只有最后一个参数可以是可选的,正是因为你描述的问题。