Asp.net ASP MVC路由与>;1参数
我定义了以下路线Asp.net ASP MVC路由与>;1参数,asp.net,asp.net-mvc,url-rewriting,Asp.net,Asp.net Mvc,Url Rewriting,我定义了以下路线 routes.MapRoute( "ItemName", "{controller}/{action}/{projectName}/{name}", new { controller = "Home", action = "Index", name = "", projectName = "" } ); 这条路线实际上有效,所以如果我在浏览器中键入 /Mil
routes.MapRoute(
"ItemName",
"{controller}/{action}/{projectName}/{name}",
new { controller = "Home", action = "Index", name = "", projectName = "" }
);
这条路线实际上有效,所以如果我在浏览器中键入
/Milestone/Edit/Co-Driver/Feature complete
它正确地转到里程碑控制器、编辑操作并传递值
但是,如果我尝试在视图中使用url.action构造链接-
<%=Url.Action("Edit", "Milestone", new {name=m.name, projectName=m.Project.title})%>
它仍然有效,但不是很干净。有什么想法吗?你可以试试
Html.RouteLink("Edit","ItemName", new {name=m.name, projectName=m.Project.title});
在ASP.NET路由(ASP.NET MVC使用的路由)中构造和匹配路由时,将使用第一个适当的匹配,而不是最贪婪的,并且顺序很重要 因此,如果您有两条路线:
"{controller}/{action}/{id}"
"{controller}/{action}/{projectName}/{name}"
在给定的顺序中,将使用第一个。在本例中,额外的值projectName和name将成为查询参数
事实上,由于您为{projectName}和{name}提供了默认值,因此它与默认路由完全冲突。以下是您的选择:
- 删除默认路由。如果不再需要默认路线,请执行此操作
- 首先移动较长的管线,并使其更加明确,使其与默认管线不匹配,例如:
这样,任何controller==Home的路由都将与第一个路由匹配,任何controller!=家将与第二条路线相配routes.MapRoute( "ItemName", "Home/{action}/{projectName}/{name}", new { controller = "Home", action = "Index", name = "", projectName = "" } );
- 使用RouteLink而不是ActionLinks,特别是命名您想要的路由,这样它就可以创建正确的链接而不会产生歧义
<%=Html.RouteLink("Edit", "ItemName", new { projectName=m.Project.title, name=m.name, controller="Milestone", action="Edit"})%>
<%=Html.RouteLink("Edit", "ItemName", new { projectName=m.Project.title, name=m.name, controller="Milestone", action="Edit"})%>