2013-01-17 96 views
1

我想添加自定義路由,但無法使其工作。 我想使用正常的路由,除非它命中特定的控制器,使用不同的可選參數,而不是id。具有可選參數的額外MVC路由

在我的領域,這存在:

context.MapRoute(
    "Admin_default", 
    "Admin/{controller}/{action}/{id}", 
    new { action = "Index", id = UrlParameter.Optional } 
    ); 

以上,我嘗試添加:

context.MapRoute(
      "Admin_Users", 
      "Admin/Users/{action}/{username}", 
      new { action = "Index", username = UrlParameter.Optional } 
     ); 

而在代碼中,我調用頁面:

@Html.ActionLink("Edit", "Edit", new { username=user.UserName }) 

它的工作原理,但鏈接顯示爲/管理員/用戶/編輯/?用戶名

,我想:/管理/用戶/編輯/用戶名

不過,我想保持我的所有其他網頁相同的路線,即存在:

/Admin/Shop/Products/Edit/1 

它使用默認路由

編輯

我把它通過增加控制器=「我們的工作在我的路線上。

context.MapRoute(
     "Admin_Users", 
     "Admin/Users/{action}/{username}", 
     new { controller="Users", action = "Index", username = UrlParameter.Optional } 
    ); 

我以爲這是它的URL部分(上面的行)的點?

+0

請停止將「ASP.NET MVC」簡稱爲「MVC」。一個是框架,而另一個是獨立於語言的設計模式。這就像打電話給IE - 「互聯網」 –

+0

不用擔心,我使用了aspnet.mvc標籤。有關這個問題的任何建議? – password

+0

...實際上,我使用的標籤,如果你看編輯歷史 –

回答

1

你的代碼是正確的,但你的訂單不是。

ASP.NET MVC使用第一個路線適用。在你的情況下,通用路線將適用。更改訂單,您的'管理員/用戶/ ...'路線將具有更高的優先級。

+0

我認爲這是問題。它沒有在上面或下面工作,但我認爲這是因爲默認路由適用於Admin/Users下的所有內容。 – password