asp.net mvc4设置area里面使用相同的 Controller 名称并设置area里的页面为起始页

1、使用重名controller

   在asp.net mvc2以后的版本里面,有了area(区域的概念),这为我们开发中提供了不少方便的地方,但是很不凑巧,若是存在多个重名的controller就会发生错误,因此我们可以根据router的规则来解决这个问题。

错误提示:

我们可以根据错误提示来解决这个问题,在MapRoute方法添加namespaces参数,代码如下:

复制代码
 1 public static void RegisterRoutes(RouteCollection routes)
 2         {
 3             routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 4 
 5             routes.MapRoute(
 6                 name: "Default",
 7                 url: "{controller}/{action}/{id}",
 8                 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
 9                 namespaces:new []{"MvcApplication8.Controllers"}
10             );
11         }
View Code
复制代码

加上命名空间后,就会按照命名空间去找相应的控制器,这个问题就解决了。

2、设置area里面的页面为起始页

解决这个问题,我们可以使用Route对象的DataTokens属性来指定命名空间列表。DataTokens.Add()方法,我们可以理解为存储于Route对象的DataTokens属性中,对应的Key为“Namespaces”。这两个问题的解决方法有相似之处。

代码:

复制代码
 1 public static void RegisterRoutes(RouteCollection routes)
 2         {
 3             routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 4 
 5             routes.MapRoute(
 6                 name: "Default",
 7                 url: "{controller}/{action}/{id}",
 8                 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
 9                 namespaces: new[] { "MvcApplication8.Controllers" }
10             ).DataTokens.Add("area","admin");
11         }
View Code
复制代码

其中defaults里面的controller和action为area里面设置起始页面的controller和action方法。

 

两个问题都解决了,欢迎探讨。

posted @   狼性法则  阅读(2198)  评论(2编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示