2010-10-07 63 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文件夹的根目录下创建其相应的控制器。