2010-10-07 64 views
1

我正在構建我的第一個Asp.Net MVC2網站,現在我正在嘗試向該網站添加一個/ Admin區域。使用管理子網站進行路由的正確流程

我不希望這個地區是分享範圍主要組用戶,所以當你進入http://Intranet/Admin

我已經是一個NewsController我的普通用戶,但我也想要一個管理員NewsController將只能訪問我不知道如何設置類層次結構和文件夾,以便在添加視圖時它們位於正確的位置。

我在我的Global.Asax.cs裏面添加了並且正確解析了路由。

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

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

而在文件夾層次我設置

Views/ 
    Admin/ 
    News/ 
     ...I want the new view to go here... 

在控制器

Controllers/ 
    Admin/ 
     AdminController.cs 
     NewsController.cs (this is the one i want for administration) 
    NewsController.cs (this is the regular one for viewing the list, specific item etc) 

我所面臨的問題是,當我進入對指數的管理員/ NewsController.cs並添加查看它嘗試在/News/Index.aspx而不是/Admin/News/Index.aspx創建它。

這是我的C114訊控制器控制器/管理 - >添加 - >控制器

namespace Intranet.Controllers.Admin 
{ 
    public class NewsController : Controller 
    { 
     public ActionResult Index() 
     { 
      return View(); 
     } 
    } 
} 

的代碼是不是有什麼我做不正確,或者我應該怎麼改變,這樣,當我添加的意見它們正在/ Admin/{area}目錄中創建。

回答

1

由於您使用的是MVC2,因此解決此問題的最簡單方法是爲管理部分創建一個實際的MVC「區域」。現在你正在做默認部分的所有內容,並使用Admin文件夾。如果您創建了一個管理員區域(在衆所周知的位置區域下)文件夾,那麼您將擁有一個AdminAreaRegistration - 您將在哪裏配置您的管理路線。由於您將此作爲區域的一部分,因此URL「/ Admin」的第一部分將用於「區域」標記。這將消除使用哪個控制器並正確拾取您想要的控制器。所以你的文件夾結構將是:

/Areas 
    /Admin 
     /Controllers 
      NewsController.cs 
etc. 
+0

謝謝。花了一點時間,我的腦袋圍繞着額外的控制器步驟來分離兩個區域,但現在都很好 – 2010-10-07 03:15:49

0

當您嘗試爲現有控制器操作創建視圖時,它始終在視圖的根文件夾上創建。 View的默認路徑始終指向Views文件夾的根目錄。

例如:

Controllers 
    Admin 
     AdminController.cs 
     HomeController.cs 
    HomeController.cs 

在該層次結構中,既管理員和根股份視圖文件夾相同的視圖內的HomeController的。

Views 
    Home 
     Index.aspx 

除非您在控制器的管理文件夾內的HomeController的所有ActionResults中返回指定的View()。它將映射到某個視圖。

示例,ActionResult內的控制器中Admin文件夾的HomeController.cs。

namespace Intranet.Controllers.Admin 
{ 
    public class HomeController : Controller 
    { 
     public ActionResult Index() 
     { 
      return View("Home/Index"); 
     } 
    } 
} 

這將在視圖映射文件夾,這樣

Views 
    Admin 
     Home 
      Index.aspx 

但是如果當你返回你的ActionResult視圖不指定搜索路徑,它將映射到的默認位置這是這樣的意見。

Views 
    Home 
     Index.aspx 

這樣做的原因是,即使你指定在Global.asax的路由,即只映射到哪個控制器URL應指向,而不是瀏覽文件夾。

當您右鍵單擊並在控制器的任何子平面的ActionResult上創建視圖時,它始終在Views文件夾的根目錄下創建其相應的控制器。