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

时间:2010-05-19 16:22:53

标签: c# asp.net asp.net-mvc

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

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

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

到目前为止,我们已经看过使用链接文件有两个完全独立的项目,第二个项目从第一个项目共享所需的文件。

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

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

5 个答案:

答案 0 :(得分:6)

这篇文章可能有所帮助:http://dotnetslackers.com/articles/aspnet/storing-asp-net-mvc-controllers-views-in-separate-assemblies.aspx

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

答案 1 :(得分:4)

如果它们 90%相同并且您希望在功能发展时保持同步,我会考虑将它们组合到一个Web应用程序中并使用主机标头来区分和更改图像/链接/文本/功能/等等。这两个网站之间。

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

现在在控制器中,您可以让if (Brand.SupportsPageX) {...}决定下一步显示什么。如果您将品牌对象作为基本视图模型的一部分或将其放在视图集合中,您可以使用品牌名称,图像目录等视图来自定义它们的外观。

答案 2 :(得分:2)

  1. 尽可能多地放入共享的非UI库项目中。我在每个涉及此项目的项目上都这样做,提高了可测试性,与Windows服务共享代码以及其他一些原因。

    我发现如果你对此很咄咄逼人,那么通常超过三分之二的项目会在非UI共享库中。

    完成此操作后,您可以更进一步,创建第二个包含一些共享MVC / UI元素的库。

  2. 根据您对此的看法,RenderAction可能会有所帮助。如您所知, RenderAction 将允许您对这些控制器/视图组件进行分组,并在运行时传入变量参数。

答案 3 :(得分:2)

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

答案 4 :(得分:2)

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