我正在尝试映射某些路由,以便自动生成的Urls看起来像 这两个代码块的Admin / controller / action / param, @ Url.Action(“action”,“controller”,new {id =“param”})和 @ Url.Action( “行动”, “控制器”
这两个代码块的Admin / controller / action / param,
@ Url.Action(“action”,“controller”,new {id =“param”})和
@ Url.Action( “行动”, “控制器”,新的{类型= “参数”})
我所做的是在区域注册中的以下内容,
context.MapRoute( "Admin_default", "Admin/{controller}/{action}/{id}", new { action = "Index", id = UrlParameter.Optional }, new string[] { "namespaces" }); context.MapRoute( "Admin_type", "Admin/{controller}/{action}/{type}", new { action = "Index", type = UrlParameter.Optional }, new string[] { "namespaces" });
当参数名称为id时,生成的url是预期的,但是当参数名称是type,而不是controller / action / typevalue时,它会生成类似controller / action /?type = typevalue的内容
有没有办法生成像控制器/动作/类型值的url保持Admin_default路由的生成器行为完整?
when parameter name is id, url generated is as expected, but when
parameter name is type, instead of controller/action/typevalue, it
generates something like controller/action/?type=typevalue
发生这种情况是因为第一条路线用于映射网址(ID是可选的).
您可以尝试为路线添加一些约束.我猜你的id参数是一个整数,type参数是一个字符串.在这种情况下,您可以尝试使用此路线:
context.MapRoute( "Admin_default", "Admin/{controller}/{action}/{id}", new { action = "Index", id = UrlParameter.Optional }, new { id = @"\d+" }, new string[] { "namespaces" }); context.MapRoute( "Admin_type", "Admin/{controller}/{action}/{type}", new { action = "Index", type = UrlParameter.Optional }, new string[] { "namespaces" });
您可以找到有关路线约束here的更多信息.