在MVC应用程序之间共享视图,逻辑等

时间:2011-06-13 23:56:19

标签: .net asp.net-mvc

我们有一个功能齐全的ASP.NET MVC 2应用程序。我正在创建一个MVC 3应用程序,它应该具有与现有应用程序相同的外观和感觉。也就是说,它应该使用相同的导航ascx,页眉和页脚ascx等。现有应用程序的ascx根据模型中的内容填充自己,因此它不仅仅是“我想要带来的UI内容”,它是模型和控制器逻辑也与这些控制有关。

有没有很好的方法可以在不重构原始应用程序的情况下执行此操作?我听说过Portable Areas(http://lostechies.com/erichexter/2009/11/01/asp-net-mvc-portable-areas-via-mvccontrib/),但看起来需要一个重要的重构器在现有的应用程序上。我还研究了Razor单文件生成器扩展,它允许我们将视图编译成dll并共享它们,但是,这需要将现有应用程序转换为MVC 3,然后将视图转换为Razor。 (而且我仍然不确定之后它是否一定“容易”。)

我是否忽视了这里明显的一切?感觉应该有一个很好的方法来做到这一点,但也许现有的应用程序只需要一个大的改革。 :P

提前致谢!

2 个答案:

答案 0 :(得分:1)

最简单的解决方案可能是更新到MVC3(如果你没有与不能使用.NET 4的东西集成,则是微不足道的),并在将视图移动到共享库时将视图转换为Razor。 Razor视图引擎内部与Web窗体视图引擎有许多不同之处,这使得它更容易适应在共享库中使用。

在我自己的项目中,我有预编译的视图引擎处理所有视图,但是设置多个视图引擎很容易,因此将使用第一个查找有效视图的引擎。对于布局,您需要为两个视图引擎保留一个版本,但如果您在将所有视图一次性转换为Razor时遇到问题,那么这不是额外的努力。

共享控制器逻辑非常简单。在共享库中定义控制器,并将其子类化到系统将要查找控制器的controllers文件夹中。

答案 1 :(得分:1)

您也可以考虑使用这个将MVC2项目转换为MVC3项目的方便工具。我使用过它,转换后只进行了一些微调,效果很好。

http://blogs.msdn.com/b/marcinon/archive/2011/01/13/mvc-3-project-upgrade-tool.aspx