2

我是 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

干杯。

4

3 回答 3

2

如果您已绑定并确定要拥有单独的项目,那么您可以使用 Portable Areas,它是 MVC Contrib 项目的一部分。

http://mvccontrib.codeplex.com/

但是,您不需要为了拥有不同的 UI 而拥有单独的项目。默认情况下,区域有自己的视图和共享视图区域,并使用单独的母版页。因此,您可以使用正常区域并仍然保持两种不同的外观和感觉、不同的代码以及其他任何内容。

使用单独项目的唯一原因是:

  1. 你有不同的人在为每个人工作,并希望让他们在物理上分开以便于开发。
  2. 您想让便携式区域成为“插件”之类的东西,在我看来并非如此。
  3. 您希望将这些区域与主应用程序分开部署。
于 2013-03-31T21:57:11.143 回答
0

您的命名空间看起来不对。

context.MapRoute(
    "Admin_default",
    "cmsAdmin/{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", area = "Admin", id = UrlParameter.Optional },
    new[] { "cmsApp.Areas.Admin.Controllers" }
);
于 2013-03-31T20:56:48.450 回答
0

也许您在 global.asax 中缺少 RegisterAllAreas() ?

于 2013-03-31T20:56:54.230 回答