3

到目前为止,我已经能够摆脱使用 ASP.NET MVC 附带的默认路由。不幸的是,现在我正在涉足更复杂的路线,我正在努力思考如何让它发挥作用。

我试图获得的一个简单示例是让路径 /User/{UserID}/Items 映射到用户控制器的 Items 函数。谁能告诉我我在这里的路由做错了什么?

routes.MapRoute("UserItems", "User/{UserID}/Items", 
                      new {controller = "User", action = "Items"});

在我的 aspx 页面上

Html.ActionLink("Items", "UserItems", new { UserID = 1 })
4

4 回答 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>
于 2008-09-23T04:00:25.163 回答
1

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

于 2008-09-23T03:47:25.787 回答
0

首先查看它生成的 URL 并使用Phil Haack的路由调试库检查它。它会清除很多东西。

如果您有一堆路由,您可能需要考虑命名您的路由并使用命名路由。当您重新访问代码时,它将使您的意图更加清晰,并且可能会提高解析速度。

此外(这纯粹是个人意见)我喜欢在页面开头的某处以字符串的形式生成链接,然后将这些字符串放入我的 HTML 中。这是一个很小的开销,但在我看来使代码更具可读性。此外,如果您有或重复链接,则只需生成一次。

我更喜欢放

<% string action = Url.RouteUrl("NamedRoute", new 
    { controller="User",
      action="Items",
      UserID=1});%>

后来写

<a href="<%=action%>">link</a>
于 2009-04-03T07:22:25.037 回答
0
Html.ActionLink("Items", "User", new { UserID = 1 })
于 2011-01-30T01:53:48.963 回答