zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    美剧基本演绎法福尔莫斯的一句话
    HowToDoInJava 其它教程 1 · 翻译完成
    我们关于版权保护的意见与建议
    HowToDoInJava Spring 教程·翻译完成
    【转】21世纪律师办公自动化的一个调查
    iBooker AI+财务提升星球 2020.4 热门讨论
    布客·ApacheCN 翻译校对活动进度公告 2020.5
    数据可视化的基础知识·翻译完成
    Java 高效编程(Effective Java)中文第三版(补档)
    布客·ApacheCN 编程/大数据/数据科学/人工智能学习资源 2020.4
  • 原文地址:https://www.cnblogs.com/taven/p/1757454.html
Copyright © 2011-2022 走看看