2010-12-16 158 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