在 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 个操作:Summary
、Details
和 Status
,它们都没有使用 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 3 中为填充的下拉列表创建视图模型
Ajax 传递空值但控制器在 ASP.NET MVC 中为空