`

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

阅读更多

开发工具:VS2010中文旗舰版

出错的信息:

 

错误信息
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->找到了多个与名为“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文件的代码中,将

 

代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->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 为例子:

 

代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->        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

 

分享到:
评论

相关推荐

    asp.net.mvc

    3. **[ASP.NET.MVC系列].ASP.NET.MVC.in.Action.pdf**:书名中的"In Action"通常是实战导向的,这本书可能包含实际项目案例,讲解如何在真实环境中应用ASP.NET MVC,包括最佳实践、常见问题解决方案和架构指导。...

    ASP.NET MVC 2 Cookbook

    - 针对大型应用,ASP.NET MVC 2支持Areas特性,允许将相关功能模块分组,每个Area可以看作是一个独立的小型MVC应用。 6. **过滤器(Filters)** - 过滤器是可重用的代码片段,可应用于控制器或特定的动作,如授权...

    通用asp.net mvc5 Easyui开发框架源码.rar

    5. ** Areas**:对于大型项目,ASP.NET MVC5提供了Areas功能,可以将应用拆分为多个独立的功能区域,每个区域都可以看作是一个小型的MVC应用程序。 6. **OData支持**:ASP.NET MVC5支持OData协议,可以方便地构建...

    MVC模式与ASP.NET MVC框架概述_mvc_MVC设计模式_

    8. ** Areas**:ASP.NET MVC的Areas功能可以将大型应用划分为多个独立的模块,每个模块有自己的控制器、视图和模型,有助于保持代码组织清晰。 **三、ASP.NET MVC与Web Forms的区别** 与传统的ASP.NET Web Forms...

    asp.net下mvc3的区域配置和mvc3的分页 curd

    在ASP.NET MVC3中,区域(Areas)是一个组织大型项目结构的机制,它可以帮助我们更好地管理控制器和视图,使代码更易于管理和扩展。分页(Paging)是Web开发中的常见需求,尤其在处理大量数据时,它能提高用户体验并...

    Web开发新体验_ASP.NET.3.5.MVC架构与实战源代码

    ASP.NET MVC框架提供了许多内置特性,如路由、模型绑定、验证、依赖注入和 Areas 等,帮助开发者更高效地构建Web应用程序。路由允许自定义URL结构,模型绑定简化了模型数据与HTTP请求数据之间的转换,验证则能确保...

    NIIT ASP.net试题(带答案)

    5. **数据库集成**:ASP.NET MVC3常与Entity Framework一起使用,提供ORM(对象关系映射)功能。考生需要知道如何配置数据库上下文,创建数据库模型,以及使用LINQ进行数据查询。 6. **表单验证**:ASP.NET MVC3...

    microblogdemo

    1. **路由系统**:Asp.Net Mvc使用路由引擎根据URL映射到特定的控制器和操作,提供高度定制的URL结构,使得URL更具语义性。 2. **依赖注入(Dependency Injection, DI)**:内置对DI的支持,允许开发者将服务注入到...

    AspNetMVCPreview3

    10. ** Areas**:ASP.NET MVC Preview 3中的Areas功能,允许在一个大型项目中组织多个独立的功能模块,每个Area都可以看作是一个小型的MVC应用,帮助管理复杂的项目结构。 安装文件`AspNetMVCPreview3-setup.msi`...

    net+mvc中文文档

    .NET MVC(Model-View-Controller)是微软提供的一款用于构建Web应用程序的开源框架,它基于ASP.NET技术。本文档集合了关于.NET MVC的中文资源,旨在帮助开发者更好地理解和运用这一强大的开发工具。以下是对.NET ...

    使用ASP.NET路由解决404错误

    在ASP.NET Web Forms中,虽然默认使用的是基于文件的URL结构,但可以通过启用路由功能来改变这一行为。在Global.asax.cs文件中,可以使用`RouteTable.Routes`集合来注册路由。例如,以下代码创建了一个简单的路由: ...

    OneTrueError 1.0.0-rc4 (Server)

    - **Areas**: 这是 ASP.NET MVC 应用程序中的一个特殊目录,用于组织功能相关的控制器、视图和模型。在 OneTrueError 中,可能包含了特定功能或模块的实现。 - **bin**: 存放编译后的可执行文件和库,这些文件在...

    图片上传知识点整理.docx

    在ASP.NET MVC框架中,通常会通过在`Areas`目录下创建新的区域来扩展应用的功能。这样做可以更好地管理和组织控制器和视图。要添加新区域,右键点击`Areas`,选择“添加” -&gt; “区域”,然后添加一个控制器到这个新...

Global site tag (gtag.js) - Google Analytics