ASP.NET MVC 路由

3

到目前为止,我一直能够使用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 })
4个回答

4
根据我手头的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>

1
你能发布更多信息吗?aspx页面在链接中生成了什么URL?这可能是由于路由定义的顺序。我认为你需要在默认路由之前声明你的路由。

0
Html.ActionLink("Items", "User", new { UserID = 1 })

0
首先,从生成的URL入手,使用Phil Haack的路由调试库进行检查。这将澄清很多事情。
如果您有一堆路由,您可能需要考虑为它们命名并使用命名路由。当您重新访问代码时,它将使您的意图更加清晰,并且可能会提高解析速度。
此外(这仅是个人意见),我喜欢在页面开头的某个地方生成我的链接字符串,然后将这些字符串放入HTML中。这是一个微小的开销,但在我看来可以使代码更加可读。此外,如果您有重复的链接,您只需要生成一次。
我更喜欢把
<% string action = Url.RouteUrl("NamedRoute", new 
    { controller="User",
      action="Items",
      UserID=1});%>

然后编写

<a href="<%=action%>">link</a>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接