并行运行ASP.NET Webforms和ASP.NET MVC

时间:2011-06-20 16:28:50

标签: asp.net asp.net-mvc

目前我正在开发使用ASP.NET Web Forms构建的Web项目。我们想要使用MVC框架开始构建新页面。

看起来并行运行MVC和Web表单是可行的http://weblogs.asp.net/rajbk/archive/2010/05/11/running-asp-net-webforms-and-asp-net-mvc-side-by-side.aspx

我很好奇是否有任何我需要计划的问题或陷阱。

我在ASP.NET 4.0上运行并计划使用MVC3。

5 个答案:

答案 0 :(得分:11)

我一直在运行Webforms和MVC以获取内部应用程序。它起初是一个webforms应用程序,我已经将它迁移到MVC2(然后是3),其中几个仍然成功地与Webforms一起工作。

正如达林所说,主要问题是模板化。如果使用Webforms视图引擎,则必须创建2层母版页。 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,那就更好了)它会变得更难。你必须做一些额外的工作,超过我之前提到的。 This blog post应该在这方面提供帮助。

答案 1 :(得分:2)

除了what Darin said之外,如果你可以帮助它并创建正确的URL路由,那么尝试不使用WebForms视图引擎,这样WebForms应该处理的页面仍由WebForms处理。

答案 2 :(得分:1)

我能想到的唯一问题是被诱惑将现有的WebForms代码重用到MVC部分并以DataSets结束到你的控制器动作中,或者(可能是上帝保佑)进入你的观点:-)重新使用这些代码的另一个问题是,你应该非常小心,不要在你的MVC视图中结束runat="server"内容。我会保持这两个部分尽可能松散耦合。因此,我不会将它们混合到同一个项目中: - )

答案 3 :(得分:1)

我想这取决于WebForms和站点的MVC部分之间的交互。如果两者都使用相同的后端和相同的安全日志,那么您应该没问题。如果Web表单和MVC操作需要合作,您可能会遇到问题。正如我所说,这实际上取决于互动将是什么。如果他们并排奔跑但是彼此独自一人,那么你应该没事。

可能出现的一个问题是从WebForms切换到MVC所需的思维转变,反之亦然,尽管经验和实践将在这里教你。

答案 4 :(得分:0)

我建议将两个应用程序分开并为它们提供不同的子域,您可以通过使用虚拟目录将它们保存在同一个子域中,但我不喜欢这种方法。

通过共享validationKey和decryptionKey,您可以使用单个cookie在两个应用上进行验证。

通过这种方式,您的代码库不会混淆,并且您不会遇到任何配置文件问题。

我发布了longer description这种方法。