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




本文转自远哥博客园博客,原文链接:http://www.cnblogs.com/taven/archive/2010/06/13/1757454.html,如需转载请自行联系原作者

目录
打赏
0
相关文章
|
17天前
|
基于 .NET 开发的多功能流媒体管理控制平台
基于 .NET 开发的多功能流媒体管理控制平台
一个.NET开源、免费、功能强大的 PDF 处理工具
一个.NET开源、免费、功能强大的 PDF 处理工具
3款.NET开源、功能强大的通讯调试工具,效率提升利器!
3款.NET开源、功能强大的通讯调试工具,效率提升利器!
40 10
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
基于.NET开源、功能强大且灵活的工作流引擎框架
基于.NET开源、功能强大且灵活的工作流引擎框架
.NET 9 中 LINQ 新增功能实操
.NET 9 中 LINQ 新增功能实操
精选2款C#/.NET开源且功能强大的网络通信框架
精选2款C#/.NET开源且功能强大的网络通信框架
2024年全面且功能强大的.NET快速开发框架推荐,效率提升利器!
2024年全面且功能强大的.NET快速开发框架推荐,效率提升利器!
一个整合性、功能丰富的.NET网络通信框架
一个整合性、功能丰富的.NET网络通信框架
.NET 8 强大功能 IHostedService 与 BackgroundService 实战
【11月更文挑战第7天】本文介绍了 ASP.NET Core 中的 `IHostedService` 和 `BackgroundService` 接口及其用途。`IHostedService` 定义了 `StartAsync` 和 `StopAsync` 方法,用于在应用启动和停止时执行异步操作,适用于资源初始化和清理等任务。`BackgroundService` 是 `IHostedService` 的抽象实现,简化了后台任务的编写,通过 `ExecuteAsync` 方法实现长时间运行的任务逻辑。文章还提供了创建和注册这两个服务的实战步骤,帮助开发者在实际项目中应用这些功能。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等