我正在尝试映射某些路线,以便自动生成的网址看起来像
Admin/controller/action/param
这两个代码块,
@Url.Action("action","controller",new{id="param"})
和
@Url.Action("action","controller",new{type="param"})
我在区域注册中做了如下操作,
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
有没有一种方法可以生成类似于 controller/action/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
发生这种情况是因为第一个路由用于映射 url(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 .
关于asp.net-mvc - 具有不同参数名称的 Asp.Net 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6669596/