2010-04-05 146 views
1

我有一個與ASP.NET MVC應用程序的一些路由有趣的問題。我正在構建一個CMS,並且我有一個捕獲所有處理程序,它接受URL並檢查數據庫中是否有匹配的內容。如果是這樣,則顯示它,否則我們得到了404ASP.NET MVC,區域,路由和控制器工廠

現在我已經獲得了所有與一些測試數據的工作,我提出寫一個快速的管理系統。我想我會使用一些新的Area功能烘焙到MVC 2中,所以我創建了一個名爲Admin的區域,其中包含一個名爲Home的控制器。 但現在我有一個問題,在請求應用程序根路徑時,管理區中的默認HomeController正在返回。

問題是沒有其他HomeController用於'root'應用程序(託管所有區域的應用程序),而是根將被重定向到我的catch-all處理程序並從數據庫填充。因此,現在控制器工廠正在返回最佳匹配控制器,它認爲它是管理區域,我真正需要的是它完全不匹配 - 就像以前一樣。

除了重命名管理員的HomeController別的東西,是有另一種解決方案?

回答

4

在管理方面,開AdminAreaRegistration.cs

添加正確的命名空間在您的控制器:

public override void RegisterArea(AreaRegistrationContext context) 
     { 
     context.MapRoute(
      "Admin_default", 
      "Admin/{controller}/{action}/{id}", 
      new { action = "Index", id = UrlParameter.Optional }*, 
      new string[] { "Stridh.Areas.Admin.Controllers" }* 
     ); 
     } 

現在做同樣在Global.asax:

 routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
     new string[] { "Stridh.Controllers" } // Parameter defaults 
    ); 
+0

忘記了更新,但這是最終的解決方案。 – Kieron 2010-11-19 13:14:42

0

編輯...(對不起,最後回答是關閉主題)。

在黑暗中拍攝。嘗試改變默認的圖路線....

routes.MapRoute( 「默認」,
「{控制器}/{行動}/{ID}」,
新{控制器= 「家」,區= 「」,行動= 「指數」,ID = 「」}

也許面積= NULL。

或改變從家裏控制器別的東西。

+0

不安靜是怎麼回事,當我請求http://本地主機/它會嘗試在http:// localhost/Area /加載控制器,因爲這是唯一可用的HomeController實例。 – Kieron 2010-04-05 16:24:29

+0

我在上面編輯了我的答案。 – 2010-04-05 17:48:59

+0

您可能還想將命名空間選項添加到默認路由聲明中。 – Ahmad 2010-04-21 10:21:42