繁体   English   中英

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

[英]How to make one ASP.NET MVC site “derive” from another

我的问题类似于“ASP.NET 2项目共享相同的文件” ,但与ASP.NET MVC倾斜。

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

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

到目前为止,我们已经考虑使用链接文件来完成两个完全独立的项目,其中第二个项目从第一个项目共享所需的文件。

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

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

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

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

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

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

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

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

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

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

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

我正在进行的项目目前有类似的要求,我们已开始考虑使用便携式区域 我个人目前还没有深入研究它们,但值得你去看看。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM