ASP.NET MVC路由
时间:2020-03-06 14:34:41 来源:igfitidea点击:
到目前为止,我一直无法使用ASP.NET MVC附带的默认路由。不幸的是,既然我正在扩展到更复杂的路线,那么我正在努力地思考如何使它起作用。
我尝试获取的一个简单示例是将路径/ User / {UserID} / Items映射到User控制器的Items函数。谁能告诉我我在这里的路线做错了什么?
routes.MapRoute("UserItems", "User/{UserID}/Items", new {controller = "User", action = "Items"});
在我的aspx页面上
Html.ActionLink("Items", "UserItems", new { UserID = 1 })
解决方案
我们可以发布更多信息吗?链接中的aspx页生成什么URL?这可能是由于路线定义的顺序。我认为我们需要在默认路由之前声明路由。
通过我前面的MVC Preview 4代码,我们正在使用的Html.ActionLink()的重载就是这个代码:
public string ActionLink(string linkText, string actionName, object values);
注意第二个参数是actionName而不是routeName。
因此,请尝试:
Html.ActionLink("Items", "Items", new { UserID = 1 })
或者,尝试:
<a href="<%=Url.RouteUrl("UserItems", new { UserId = 1 })%>">Items</a>
首先,先查看它生成的URL,然后使用Phil Haack的路由调试库进行检查。它将清除许多内容。
如果我们有一堆路由,则可能要考虑命名路由并使用命名路由。当我们重新访问代码时,它将使意图更加清晰,并且可以潜在地提高解析速度。
此外(这纯粹是个人观点),我喜欢在页面开头的某个位置生成字符串形式的链接,然后将这些字符串放入HTML中。这是一个很小的开销,但是在我看来,使代码更具可读性。此外,如果我们具有或者重复链接,则只需生成一次。
我喜欢放
<% string action = Url.RouteUrl("NamedRoute", new { controller="User", action="Items", UserID=1});%>
后来写
<a href="<%=action%>">link</a>