.net mvc单个管理员部分多个站点

时间:2009-08-04 10:13:03

标签: asp.net-mvc decoupling code-separation

期望的结果:

4个面向客户的站点作为分离项目 所有四个网站使用的一组管理代码

我目前的设置是4个项目:

  • 模型/实体的核心

  • 存储库数据

  • 控制器,以及控制器

  • Web for views

现在,Web项目包含管理员和面向客户的方面的视图。我想把它分成一个管理项目和4个“客户”项目。

我谷歌在从网络应用程序引用网络应用程序方面收效甚微。我在haacked.com上看过areas,但这似乎不太合适。我并不特别想在dll中嵌入视图,因为在调试/编码标记时这会很麻烦。显然我不想要代码的多个副本。

有人可以指出或建议可行的方法吗?我有点难过。

1 个答案:

答案 0 :(得分:1)

如果将项目拆分为4个webproject的原因是客户有不同的观点,请试试这个:

拥有1个webproject并使用子文件夹查看不同的视图。

  • Views / Home / About.aspx(如果找不到匹配的子文件夹,则使用)
  • 查看/主页/ customer1表/ About.aspx
  • 查看/主页/顾客2 / About.aspx

您可以使用自定义视图引擎来决定应该呈现哪个视图。 Web的每个安装都在web.config中定义了客户。

public class MultiTennantWebFormViewEngine : WebFormViewEngine
{
  private static string[] LocalViewFormats = 

   new string[] {
       "~/Views/{1}/" +  ApplicationConfiguration.CustomerName + "/{0}.aspx",
    "~/Views/{1}/{0}.aspx",
    "~/Views/{1}/" + ApplicationConfiguration.CustomerName  +   "/{0}.ascx",
    "~/Views/{1}/{0}.ascx",
    "~/Views/Shared/{0}.aspx",
    "~/Views/Shared/{0}.ascx"
};

  public LocalizationWebFormViewEngine()
  {      
    base.ViewLocationFormats = LocalViewFormats;
     base.PartialViewLocationFormats = LocalViewFormats;
     base.MasterLocationFormats = new string[] {

          "~/Views/{1}/" +  ApplicationConfiguration.CustomerName  + "/{0}.master",
          "~/Views/{1}/{0}.master",
           "~/Views/Shared/"  +  ApplicationConfiguration.CustomerName  + "/{0}.master",
            "~/Views/Shared/{0}.master"
      };
}

}