Asp.net MVC 2 使用Areas功能的常见错误

开发工具:VS2010中文旗舰版

出错的信息:

 

复制代码
错误信息
找到了多个与名为“Home”的控制器匹配的类型。如果为此请求(“{controller}/{action}/{id}”)提供服务的路由没有指定命名空间来搜索匹配此请求的控制器,则会发生此情况。如果是这样,请通过调用采用“namespaces”参数的“MapRoute”方法的重载来注册此路由。

对“Home”的请求找到了下列匹配的控制器:
MvcApplication1.Areas.Web.Controllers.HomeController
MvcApplication1.Areas.Admin.Controllers.HomeController 
复制代码

 

 

 

问题出现步骤:

1、新建ASP.NET MVC 2 空项目

2、添加两个Area,分别为Admin和WebSite(一个为后台,另一个为前台)

3、在两个Area中分别添加Home控制器,并分别为各Home控制器的Index方法创建视图文件

4、完成后,如下图:

注意,不使用Area的MVC程序中是不区分Cotroller的命名空间的,但是使用了Area的MVC程序是区分Cotroller的命名空间的.其合法的规则是“控制器的命名空间必须在Area的命名空间之下”,假设:

AdminAreaRegistration.cs中的命名空间为:MvcApplication1.Areas.Admin,那么控制器的命名空间必须为:MvcApplication1.Areas.Admin.xxx.xxxx ,也就是命名空间的前导部分必须是一致,否则会提示错误。

 

另外除了这里以外,在Global.asax.cs文件的代码中,将

 

复制代码
代码
public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute(
"{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                
"Default"// 路由名称
                "{controller}/{action}/{id}"// 带有参数的 URL
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值
                
            );

        }
复制代码

 

中的 controller = "Home" 修改为一个没有重名的控制器名称,否则也会报同样的错误的,这里我们可以改为 controller = "Default"。

 

还有没有更简单,更灵活的方法? 当然有,最直接的方法是修改AdminAreaRegistration.cs 和 WebAreaRegistration.cs 中的路由设置,将其控制器的命名空间传入给系统,以修改 WebAreaRegistration.cs 为例子:

 

复制代码
代码
        public override void RegisterArea(AreaRegistrationContext context)
        {
            
//context.MapRoute(
            
//    "Web_default",
            
//    "Web/{controller}/{action}/{id}",
            
//    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            
//);

            
//直接将命名空间传入
            context.MapRoute(
                
"Web_default",
                
"Web/{controller}/{action}/{id}",
                
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                
new string[] { "MvcApplication1.Areas.Web.Controllers" }
            );

        }
复制代码

 

 

OK,结束了,希望大家多多交流!

可成功运行的源码Demo下载:/Files/taven/MvcApplication1.rar

 

posted @   远哥  阅读(2824)  评论(13编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示