同时运行ASP.NET Webforms和ASP.NET MVC

11

目前,我正在从事使用ASP.NET Web Forms构建的Web项目。我们希望开始使用MVC框架构建新页面。

看起来,在同一项目中同时运行MVC和Web Forms是可行的 《在ASP.NET Web Forms和ASP.NET MVC并存》

我想知道是否存在任何问题或需要注意的地方。

我正在使用ASP.NET 4.0,并计划使用MVC3。

5个回答

11

我一直在这里运行Webforms和MVC,开始是一个Webforms应用程序,我将其迁移到MVC2(然后是3),其中有几个部分仍成功地与Webforms一起工作。

正如Darin所说,主要问题在于模板。如果使用Webforms视图引擎,则必须创建两层主控页面。Webforms代码(例如脚本管理器)不会在MVC页面上运行,而MVC代码则无法在Webforms页面下工作。

我的主控页面设置为全局主控页面,不包含任何MVC或Webforms代码。它只包含CSS、全局javascript和主要布局。然后我有一个MVC主控页面和一个Webforms主控页面,两者都使用指令来使用全局主控页面作为他们的主控页面。然后每个Webforms页面使用Webforms子主控页面,MVC使用MVC子主控页面。

如果需要在全局主控页面中放置一些代码,可以通过测试Page is System.Web.Mvc.ViewPage来检测子页面是否为Webforms或MVC页面。如果是true,则为MVC页面;否则为Webforms页面。

但是,如果决定使用Razor视图引擎(我确实建议在MVC中使用它,它更好),那么就变得更加困难了。除了我之前提到的内容,还需要一些额外的解决方法。这篇博客文章可以帮助你解决相关问题。


谢谢。这也让我看到了其他的帖子:http://www.eworldui.net/blog/post/2008/05/09/ASPNET-MVC-Living-in-a-Web-Forms-World.aspx和http://www.eworldui.net/blog/post/2011/01/07/Using-Razor-Pages-with-WebForms-Master-Pages.aspx。 - dev.e.loper

2

除了Darin所说的,如果可以避免使用WebForms视图引擎并创建适当的URL路由,以便应该由WebForms处理的页面仍然由WebForms处理。


@bzlm:感谢您添加直接链接。 - Roman

1
我能想到的唯一陷阱就是诱惑性地将现有的WebForms代码重用到MVC部分中,最终在控制器操作或视图中使用DataSets(甚至更糟糕的是runat="server")。重用此类代码的另一个陷阱是要非常小心,以免在MVC视图中出现runat="server"之类的东西。我会尽可能松散地保持这两个部分的耦合度。因此,我不会将它们混合到同一个项目中 :-)

1

我猜这取决于WebForms和MVC网站部分之间的交互。如果两者都使用相同的后端和相同的安全登录,则应该没问题。如果一个WebForm和一个MVC操作需要合作,您可能会遇到问题。就像我说的,这真的取决于交互是什么。如果它们并排运行但互不干扰,则应该没问题。

可能会出现的一个问题是需要从WebForms切换到MVC或反之所需的思维转变,尽管经验和实践会在这方面教给您。


0

我建议将这两个应用程序保持分开,并给它们不同的子域名,您可以使用虚拟目录将它们保留在同一子域名上,但我不喜欢这种方法。

您可以使用单个cookie通过共享validationKey和decryptionKey来验证两个应用程序。

这样,您的代码库不会混淆,也不会遇到任何配置文件问题。

我已经发布了一个更长的说明来解释这种方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接