我是C#和MVC架构的新手。但我正在努力学习并想要站稳脚跟。我正在构建的应用程序需要一个前端和管理区域。两者都将拥有不同的界面,并被不同的人使用,所以我认为分离它的最佳方法是为每个人创建一个单独的项目,具有单独的控制器和视图,所有这些都共享相同的模型。
但是,我似乎无法将项目注册为单独的区域。 nopCommerce为他们的管理控制面板做了这个,我尝试了解代码并找不到差异。
在我的新“管理”项目中,我有一个区域注册文件,其中包含以下代码:
using System.Web.Mvc;
namespace cmsApp.Areas.Admin
{
public class AdminAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Admin";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Admin_default",
"cmsAdmin/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", area = "Admin", id = UrlParameter.Optional },
new[] { "cmsApp.cmsAdmin.Controllers" }
);
}
}
}
我很感激有关此问题的任何进一步信息。
我已经包含了我正在处理的源代码,如果有人关心查看完整代码:https://dl.dropbox.com/u/3901723/cmsApp.rar
干杯。
答案 0 :(得分:2)
如果您受到约束并决定拥有单独的项目,那么您可以使用可移植区域,它们是MVC Contrib项目的一部分。
http://mvccontrib.codeplex.com/
但是,您不需要单独的项目只是为了拥有不同的UI。默认情况下,区域具有自己的视图和共享视图区域,并使用单独的母版页。所以你可以使用普通区域,仍然保持两个独立的外观和感觉,不同的代码,以及其他任何东西。
使用单独项目的唯一原因是:
答案 1 :(得分:0)
您的命名空间看起来不对。
context.MapRoute(
"Admin_default",
"cmsAdmin/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", area = "Admin", id = UrlParameter.Optional },
new[] { "cmsApp.Areas.Admin.Controllers" }
);
答案 2 :(得分:0)
也许你缺少global.asax中的RegisterAllAreas()?