Asp.net MVC 2 使用Areas功能的常見錯誤

來源:互聯網
上載者:User

開發工具: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

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.