2008-09-23 256 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 })