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


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

看起来像并行运行MVC和Web Forms是可行的 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。


13075
2018-06-20 16:28


起源



答案:


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

正如达林所说,主要问题是模板化。如果使用Webforms视图引擎,则必须创建2层母版页。 Webforms代码(例如脚本管理器)不在MVC页面上运行,并且MVC代码在Webforms页面下不起作用。

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

如果需要在全局母版页中放置一些代码,可以通过测试是否检测子页面是否为Webforms或MVC页面 Page is System.Web.Mvc.ViewPage。如果那样的话 true 然后它是一个MVC页面,否则它是一个Webforms页面。

但是,如果您决定使用Razor视图引擎(我建议将其用于MVC,那就更好了)它会变得更难。你必须做一些额外的工作,超过我之前提到的。 这篇博文 应该在这方面提供帮助。


11
2018-06-20 16:44



谢谢。这也引导我去其他帖子: eworldui.net/blog/post/2008/05/09/...   和 eworldui.net/blog/post/2011/01/07/... - dev.e.loper


答案:


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

正如达林所说,主要问题是模板化。如果使用Webforms视图引擎,则必须创建2层母版页。 Webforms代码(例如脚本管理器)不在MVC页面上运行,并且MVC代码在Webforms页面下不起作用。

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

如果需要在全局母版页中放置一些代码,可以通过测试是否检测子页面是否为Webforms或MVC页面 Page is System.Web.Mvc.ViewPage。如果那样的话 true 然后它是一个MVC页面,否则它是一个Webforms页面。

但是,如果您决定使用Razor视图引擎(我建议将其用于MVC,那就更好了)它会变得更难。你必须做一些额外的工作,超过我之前提到的。 这篇博文 应该在这方面提供帮助。


11
2018-06-20 16:44



谢谢。这也引导我去其他帖子: eworldui.net/blog/post/2008/05/09/...   和 eworldui.net/blog/post/2011/01/07/... - dev.e.loper


此外 达林说的话,如果您可以帮助它并创建正确的URL路由,那么尝试不使用WebForms视图引擎,以便WebForms仍然可以处理WebForms应处理的页面。


2
2018-06-20 16:39



优点。 - Daniel Hollinrake
@bzlm:感谢您添加直接链接。 - R0MANARMY


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


1
2018-06-20 16:31





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

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


1
2018-06-20 16:40





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

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

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

我发布了一个 更长的描述 这种方法。


0
2017-10-21 22:22