2010-05-19 48 views
13

我的问题类似于"ASP.NET 2 projects to share same files",但带有ASP.NET MVC倾斜。如何使一个ASP.NET MVC站点从另一个“派生”

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

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

到目前为止,我们已经看了使用链接的文件有两个,其中第二个项目股吧从第一需要的文件完全独立的项目。这种方法

的一个问题是,在第二个项目大部分页面不要在虚拟目录字面上存在,它使调试痛苦 - 你必须为了生成文件,这样就可以调试发布。

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

回答

6

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

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

+1

谢谢丹:)这篇文章看起来很可能是在正确的方向。我会立即阅读并消化它。 – 2010-05-19 16:55:45

+0

目前,至少在短期内,我们将在我们的两个项目之间共享我们的源文件(链接它们)。本文中对WebFormViewEngine所做的更改为我们提供了如何解决我们在调试过程中遇到的一些问题的想法。感谢那个丹。 – 2010-05-28 16:37:05

4

如果他们90%相同,你想保持同步的功能的发展,我会考虑让他们到一个单一的Web应用程序,并使用主机标题来区分,并改变图像/链接/文/功能/等。在两个网站之间。

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

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

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

    我发现,如果你是激进与此则项目往往有三分之二以上是在非UI共享库。

    这样做后,你可以拿东西了一步,并创建一些共享的MVC/UI元素第二个库。

  2. 根据你关于此事的意见,RenderAction可能有点帮助在这里。如您所知,RenderAction将允许您将这些控制器/视图组件组合在一起,并在运行时传递可变参数。

2

我正在处理的一个项目有类似的要求,我们已经开始寻找使用portable areas。我个人目前还没有深入研究过这些问题,但可能值得您一探究竟。

+0

这看起来很有趣 - 谢谢。 – 2010-05-27 12:58:47

2

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

+0

感谢您的信息。我仔细看过这方面的东西,这当然很有趣。我不确定我可以看到如何使用它来将我的网站实际拆分为单独的dll(似乎MVC中的区域旨在将单个网站拆分为单个程序集),但阅读起来很有趣更多关于这个地区(原谅双关语)! – 2010-05-28 16:35:11

相关问题