2008-09-23 278 views
3

直到现在,我已经能够脱离使用ASP.NET MVC附带的默认路由。不幸的是,现在我正在分支到更复杂的路线,我正在努力围绕如何使这个工作。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 }) 

回答

1

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

4

由MVC预览4码我在我的前面去了Html.ActionLink()您所使用的过载,这是一个:

public string ActionLink(string linkText, string actionName, object values); 

注意的第二个参数是如何actionNamerouteName

因此,尝试:

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

或者,尝试:

<a href="<%=Url.RouteUrl("UserItems", new { UserId = 1 })%>">Items</a> 
0

与看它产生什么网址,并用Phil Haack的航线调试库检查它首先启动。它会清除很多事情。

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

此外(这纯粹是个人观点)我喜欢在页面的起始位置在字符串中生成我的链接,然后将这些字符串放在我的HTML中。在我看来,这是一个很小的开销,但使代码更具可读性。此外,如果您有或重复链接,则必须仅生成一次。

我喜欢把

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

后来就写

<a href="<%=action%>">link</a> 
0
Html.ActionLink("Items", "User", new { UserID = 1 })