在ASP.NET MVC 3中为控制器设置默认操作(而不是索引)

时间:2012-10-03 19:41:44

标签: c# asp.net-mvc asp.net-mvc-3 routes asp.net-mvc-routing

我有一个名为Dashboard的控制器,其中包含3个操作:SummaryDetailsStatus,其中任何一个都不带ID或任何其他参数。我希望网址/Dashboard路由到Summary控制器的Dashboard操作,如/Dashboard/Summary那样,但我无法找出添加路由的正确方法。在Global.asax.cs中,我有以下内容:

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

routes.MapRoute(
    "/Dashboard",
    "Dashboard",
    new { controller = "Dashboard", action = "Summary" }
    );

对于第二部分,我也尝试过:

routes.MapRoute(
    "/Dashboard",
    "{controller}",
    new { controller = "Dashboard", action = "Summary" }
    );

routes.MapRoute(
    "/Dashboard",
    "{controller}",
    new { action = "Summary" }
    );

但在尝试访问/Dashboard时,我总是得到404。我很确定我错过了MapRoute参数格式的一些内容,但我不知道它是什么......

3 个答案:

答案 0 :(得分:35)

将您的仪表板路线移到默认路线前面:

routes.MapRoute(
    "Dashboard",
    "Dashboard/{action}",
    new { controller = "Dashboard", action = "Summary" }
);

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

路线的顺序会改变一切。另请注意我对Dashboard路线所做的更改。第一个参数是路径的名称。第二个是URL,它匹配以Dashboard开头的网址,并允许在Dashboard控制器中执行其他操作。如您所见,它将默认为Summary操作。

答案 1 :(得分:5)

您需要最后声明“默认”全部捕获路线。

答案 2 :(得分:0)

这为任何Controller asp.net设置默认操作:

routes.MapRoute("Dashboard", "{controller}/{action}", 
defaults: new { controller = "Dashboard", action = "Summary" });
相关问题