代码之家  ›  专栏  ›  技术社区  ›  Rob Levine

如何使一个ASP.NET MVC站点从另一个“派生”

  •  13
  • Rob Levine  · 技术社区  · 15 年前

    我的问题类似于 "ASP.NET 2 projects to share same files" 但有一个ASP.NET MVC斜面。

    基本上,我们有两个站点,一个主要基于另一个(大约90%的视图、控制器、图像,第二个与第一个相同)。但是,在某些情况下,视图可能不同,或者第二个站点中的控制器可能与第一个站点不同。

    有没有在ASP.NET MVC中实现这一点的简单方法?

    到目前为止,我们已经研究过使用链接文件来拥有两个完全独立的项目,其中第二个项目与第一个项目共享所需的文件。

    这种方法的一个问题是,第二个项目中的大多数页面实际上并不存在于虚拟目录中,这使得调试非常困难——您必须发布才能生成文件,以便进行调试。

    有没有人有更好的方法,或者这种方法可以简化?

    5 回复  |  直到 15 年前
        1
  •  6
  •   Daniel Dyson    15 年前

    本文可能有助于: http://dotnetslackers.com/articles/aspnet/storing-asp-net-mvc-controllers-views-in-separate-assemblies.aspx

    本质上,它涉及到创建自己的WebFormViewEngine,它告诉MVC在哪里查找视图。

        2
  •  4
  •   Ian Mercer    15 年前

    如果他们是 90%相同 如果你想让它们保持同步,随着功能的发展,我会考虑将它们制作成一个单独的Web应用程序,并使用主机头来区分和更改两个站点之间的图像/链接/文本/功能等。

    您可以在basecontroller中执行此操作:查看主机头并创建 Brand 每个页面和视图都可以访问的对象,就像它可能具有 User 对象。那 品牌 对象可以包括站点名称、站点的规范URL、该品牌的图像目录位置、打开或关闭某些功能的布尔值等等。

    现在在一个控制器里你可以问 if (Brand.SupportsPageX) {...} 决定接下来要显示什么。如果将品牌对象作为基础视图模型的一部分,或者将其放入视图集合中,则可以拥有使用品牌名称、图像目录等的视图。自定义它们的外观。

        3
  •  2
  •   kervin    15 年前
    1. 尽可能多地放入共享的非UI库项目中。我在我处理的每个项目上都这样做,提高了可测试性,与Windows服务共享代码,以及其他许多原因。

      我发现,如果您对此很有进取心,那么通常超过三分之二的项目将位于非UI共享库中。

      这样做之后,您可以更进一步,使用一些共享的MVC/UI元素创建第二个库。

    2. 根据你的意见, RenderAction 可能会有点帮助。如你所知, 渲染动作 将允许您分组这些控制器/视图组件,并在运行时传入变量参数。

        4
  •  2
  •   s1mm0t    15 年前

    我正在研究的一个项目目前有类似的要求,我们已经开始考虑使用 portable areas . 我个人目前还没有深入研究过它们,但也许值得你看一看。

        5
  •  2
  •   AdmSteck    15 年前

    我一直在与地区合作,创建多个网站,我可以用一个托管帐户托管。我想你也可以用类似的方法。通过在基础项目中实现公共功能,它将可用于每个区域。您还可以通过在区域中实现任何基本视图或控制器来覆盖它们。它可能需要对视图引擎和路由进行一些调整,但我认为可以完成。