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

 

时间: 2024-09-28 01:35:36

Asp.net MVC 2 使用Areas功能的常见错误的相关文章

为ASP.NET MVC扩展异步Action功能

异步请求处理是ASP.NET 2.0中引入的高级特性,它依托IO Complete Port,对于提高IO密集型应用程 序的吞吐量非常重要(详见原理描述和性能测试).但是目前ASP.NET MVC框架缺少异步Action功能,这 也就是老赵经常挂在嘴边的那个"目前ASP.NET MVC所缺少的非常重要的功能".在TechED 2008 China的 Session中我曾经给出过一个所谓的"解决方案",但是它复杂性之高使那个解决方案有太多限制.为了 弥补TechED上

ASP.NET MVC分页和排序功能实现_实用技巧

分页和排序,应该是软件开发中,需要必知必会的技能了,对于分页,网上很多教程,当然,别人终究是别人的,只有自己理解,会了,并且吸收之后,再用自己的语言,传授出来,这才是硬道理.好了,废话说多了.现在我们进入正题:  这里,我打算使用EF Code-First方式分页控件就是用PagedList.MVC,来做分页,对于排序,实现的思路是,加载数据出来之后,默认是升序排序,然后我们点击一下相应的列标题,就按照该字段降序排序,查数据.思路明确了,就开始干吧!  1.首先新建一个空白的MVC项目,在Mod

使用Areas分离ASP.NET MVC项目

为什么需要分离? 我们知道MVC项目各部分职责比较清晰,相比较ASP.NET Webform而言,MVC项目的业务逻辑和页面展现较好地分离开来,这样的做法有许多优点,比如可测试,易扩展等等.但是在实际的开发中,随着项目规模的不断扩大,Controller控制器也随之不断增多.如果在Controllers文件夹下面有超过两位数controller,即便采用良好的命名规范,或者用子文件夹的形式区分不同功能的控制器,还是会影响项目的可阅读性和可维护性.因此,在一些场景下,如果能把与某功能相关的文件分离

Asp.Net MVC3 简单入门第一季(五) 通过Asp.Net MVC的区域功能实现将多个MVC项目部署到一个站点

引子 本文将主要演示怎么将多个Asp.Net MVC项目部署到一个IIS站点中的例子,主要使用的是Asp.Net MVC提供的区域的功能. Asp.Net MVC提供了区域的功能,可以很方便的为大型的网站划分区域.可以让我们的项目不至于太复杂而导致管理混乱,有了区域后,每个模块的页面都放入相应的区域内进行管理很方便.而随着项目的复杂,每个开发人员开发的模块呢也可能是一个完整的解决方案,而他要开发的UI项目呢只是主站点项目的一个区域,而如果把所有的UI项目放到一个UI项目,在团队开发时就不很方便了

ASP.NET MVC 5 - 给数据模型添加校验器

  在本节中将会给Movie模型添加验证逻辑.并且确保这些验证规则在用户创建或编辑电影时被执行.   拒绝重复 DRY ASP.NET MVC 的核心设计信条之一是DRY: "不要重复自己(DRY --Don't Repeat Yourself)".ASP.NET MVC鼓励您指定功能或者行为,只做一次,然后将它应用到应用程序的各个地方.这可以减少您需要编写的代码量,并减少代码出错率,易于代码维护.   给ASP.NET MVC 和 Entity Framework Code Firs

ASP.NET MVC 3发布 Asp.net Web应用程序的一个框架

Asp.net Mvc 是http://www.aliyun.com/zixun/aggregation/35971.html">微软官方提供的Mvc模式编写Asp.net Web应用程序的一个框架,它由Castle的MonoRail而来.目前已经历经数个版本.MVC (ModelViewController)把一个web应用分成了三个部分:model view和controller.ASP.NET MVC框架提供了一个可以代替asp.net web窗体的基于mvc的应用. ASP.NET

Asp.net MVC验证哪些事(2)-- 验证规则总结以及使用

原文 Asp.net MVC验证哪些事(2)-- 验证规则总结以及使用 上篇文章Asp.net MVC验证那些事(1)-- 介绍和验证规则使用中,介绍了Asp.net MVC中的验证功能以及如何使用.这里将对MVC中内置的验证规则进行总结. 一,查找所有验证规则 上篇文章中提到,所有的验证规则都是位于下面的命名空间下: using System.ComponentModel.DataAnnotations; 我们可以用ILSpy反编译工具,看看这个命名空间下都有些什么. 下面的图让我们一目了然,

自学MVC看这里——全网最全ASP.NET MVC 教程汇总

MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MVC技术的学习者提供一个整合学习入口.本文从Why,What,How三个角度整理MVC 的学习资源,让学习者第一时间找到最有价值的文章,获取最彻底的ASp.NET MVC 框架知识,Let's go!   1. Why :为什么需要ASP.NET MVC 本章主要为大家汇总了为什么学习Asp.net MVC替代WebForms,产生ASP.N

使用ASP.NET MVC Futures 中的异步Action

  之前看过老赵这两篇文章.也研究了一下老赵异步的实现方式. 不过感觉自己扩展的话,在ASP.NET MVC中使用异步还真是麻烦,刚好看到从RC1版开始 ASP.NET MVC Futures中提供了几个支持异步的类. 相关的类包括AsyncActionDescriptor.AsyncController.AsyncControllerActionInvoker.AsyncManager.AsyncResultWrapper.AsyncTimeoutAttribute.NoAsyncTimeou