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

Posted

技术标签:

【中文标题】在 ASP.NET MVC 3 中为控制器设置默认操作(而不是索引)【英文标题】:Set default action (instead of index) for controller in ASP.NET MVC 3 【发布时间】:2012-09-24 19:18:30 【问题描述】:

我有一个名为 Dashboard 的控制器,它有 3 个操作:SummaryDetailsStatus,它们都没有使用 ID 或任何其他参数。我希望 URL /Dashboard/Dashboard/Summary 那样路由到 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 的参数格式,但我不知道它是什么......

【问题讨论】:

【参考方案1】:

您需要最后声明“默认”包罗万象的路线。

【讨论】:

【参考方案2】:

将你的 Dashboard 路由移到默认路由的前面:

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 开头的 URL,并允许在您的 Dashboard 控制器中执行其他操作。如您所见,它将默认为Summary 操作。

【讨论】:

【参考方案3】:

这为任何控制器 asp.net 设置默认操作:

routes.MapRoute("Dashboard", "controller/action", 
defaults: new  controller = "Dashboard", action = "Summary" );

【讨论】:

以上是关于在 ASP.NET MVC 3 中为控制器设置默认操作(而不是索引)的主要内容,如果未能解决你的问题,请参考以下文章

我们如何在 ASP.NET MVC 中为整个区域设置授权?

如何在 ASP.NET MVC 中为有效字段设置绿色边框

如何在 ASP.NET MVC 3 中为填充的下拉列表创建视图模型

Ajax 传递空值但控制器在 ASP.NET MVC 中为空

如何在 ASP.NET MVC 网站中为 cookie 设置“安全”标志?

使用 ASP.NET MVC 在 JS 文件中为 jQuery 设置 ajax url