我正在构建我的第一个Asp.Net MVC2站点,现在我正在尝试向站点添加/ Admin区域。
我不希望此区域对主要用户组具有可见性,因此只有在您输入http://Intranet/Admin时才能访问
我的常规用户是NewsController,但我也想要一个Admin NewsController,我不知道如何设置Class层次结构和文件夹,以便在我添加Views时它们位于正确的位置。
在我的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)
我遇到的问题是当我进入Index和Add View的admin / NewsController.cs时,它试图在/News/Index.aspx而不是/Admin/News/Index.aspx创建它。
这是我的管理新闻控制器Controllers / Admin-> Add-> Controller
的代码namespace Intranet.Controllers.Admin
{
public class NewsController : Controller
{
public ActionResult Index()
{
return View();
}
}
}
我做错了什么,或者我应该更改什么,以便在我添加视图时在/ Admin / {area}目录中创建它们。
答案 0 :(得分:1)
由于您正在使用MVC2,解决此问题的最简单方法是为管理员部分创建一个实际的MVC“区域”。现在,您正在默认部分中执行所有操作,只使用Admin文件夹。如果您创建一个管理区域(在众所周知的位置区域下)文件夹,那么您将拥有一个AdminAreaRegistration - 您将在哪里配置您的管理员路线。因为您将作为区域的一部分执行此操作,所以URL“/ Admin”的第一个段将用于“区域”令牌。这将消除使用哪个控制器的歧义,并正确选择您想要的控制器。所以你的文件夹结构将是:
/Areas
/Admin
/Controllers
NewsController.cs
etc.
答案 1 :(得分:0)
当您尝试为现有的Controller Action创建View时,它始终在Views的根文件夹上创建。 View的默认路由始终指向Views文件夹的根目录。
例如:
Controllers
Admin
AdminController.cs
HomeController.cs
HomeController.cs
在该层次结构中,Admin和root中的HomeController在视图文件夹中共享相同的视图。
Views
Home
Index.aspx
除非您在控制器的管理文件夹内的HomeController中的所有ActionResults中返回指定的View()。它将映射到某个视图。
示例,控制器中Admin文件夹的HomeController.cs内的ActionResult。
namespace Intranet.Controllers.Admin
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View("Home/Index");
}
}
}
这将像这样
映射到Views文件夹中Views
Admin
Home
Index.aspx
但是如果在ActionResult中返回View时未指定View路径,它将映射到Views的默认位置,如下所示。
Views
Home
Index.aspx
这样做的原因是,即使您在Global.asax中指定路由,也只是映射到url应指向的控制器,而不是Views文件夹。
右键单击并在控制器的任何子级别的ActionResult上创建视图时,它始终在Views文件夹的根目录上创建其相应的Controller。