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>