2010-12-16 174 views
0

爲什麼:ASP.NET MVC路由問題?

<%= Html.ActionLinkForAreas<UsersController>(c => c.User(), "My Details") %> 

生成一個含有這樣的一個網址:

用戶/用戶

但是:

<%= Html.ActionLinkForAreas<BlaController>(c => c.Index(1), "My Bla Di Bla")%> 

像這樣的URL:

布拉

而不是這樣的:

布拉/索引

換句話說,爲什麼是Index操作「吞噬」。這是否與看起來像這樣的路由有關:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" }); 

routes.RouteExistingFiles = true; 
routes.IgnoreRoute("Content/{*wildcard}"); 
routes.IgnoreRoute("Scripts/{*wildcard}"); 

routes.MapRoute(
"Default",            // Route name 
"{controller}/{action}/{id}",       // URL with parameters 
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
); 

還是有另一個原因?我怎樣才能改變這種行爲?謝謝。

最良好的祝願,

基督教

回答

3

Becaues您指定Index作爲默認動作:

routes.MapRoute(
    "Default",            // Route name 
    "{controller}/{action}/{id}",       // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
); 

action = "Index"部分。由於這是默認操作,因此每當您創建URL時,「索引」部分都將被省略。這使您有機會擁有簡潔的網址。順便說一句,同樣的規則適用於控制器本身。如果路由到「主頁」控制器,則URL爲它的將消除「主頁」部分,從而允許您擁有諸如「/」的原始基本URL。

+0

謝謝。我問這是因爲我的mvc contrib網格吞噬了索引位。另請參閱:http://stackoverflow.com/questions/4452031/mvc-contrib-pager - 對我的問題的第三條評論。我想有一個選擇是重定向到索引動作,並使用其他一些動作,而不是Index作爲我的動作鏈接等。 – cs0815 2010-12-16 15:52:16

+0

@csetzkorn,不知道是否有一些與尋呼機的idiosynchracy。但是你肯定不會*使用默認操作。您可以愉快地移除'action =「Index」'部分,您的網站就可以正常工作。只有一些網址會比其他網址更長,因爲它們會一直包含操作名稱。 – 2010-12-16 15:54:09

+0

或者我可以爲一個控制器添加一個異常(使用長索引URL)?謝謝! – cs0815 2010-12-16 15:56:41