尝试一起运行WebForms和MVC3时是否有任何问题需要注意?

时间:2012-02-20 14:59:25

标签: asp.net asp.net-mvc webforms

当前的代码库完全是WebForms,大多数逻辑被填充到代码隐藏文件中。我正在调查使用MVC3添加新页面和未来重构的可能性,而不必抛弃整个代码库(一个大禁忌)。所有这些页面都是同一个“应用程序”的一部分,因此它并不像使用MVC创建新项目那么简单 - 它们必须非常密切地进行交互,在某些情况下,WebForms页面必须重定向到MVC页面,反之亦然。

我发现了一些文章,展示了如何将两者集成在一起(虽然在非常简单的场景中,虽然我的场景相当复杂),但有任何问题需要注意吗?特别是关于从WebForms页面转到MVC页面然后再回到WebForms页面,其中需要跨越页面传递数据,例如来自Session(并且不一定在加载时完全从数据库读取),例如工作流程如:

  1. (WebForms)用户转到CreateQuote.aspx?CustomerId = 42并输入一些数据。他们点击“处理”按钮......
  2. (MVC)/ customers / 42 /进程MVC页面,读取之前提交的信息,并做一些额外的事情。用户点击“下一步”按钮...
  3. (WebForms)CompleteQuote.aspx?CustomerId = 42& QuoteId = 534235页面,它从以前的MVC页面中提取信息并对其应用更多逻辑。
  4. 此外,我们现有的项目是一个ASP.NET Web 站点项目(即每个页面都是自己的DLL);它是否必须转换为Web 应用程序项目才能与MVC并存(由于代码隐藏文件中存在大量重复代码,这是一项重大的重构工作)?

1 个答案:

答案 0 :(得分:2)

我建议您避免在同一个应用程序中混合ASP.NET MVC和经典WebForms。将它们保存在单独的项目中,并通过标准HTTP协议机制(查询字符串参数,表单帖子,cookie等)进行通信。如果它们托管在同一个域中,您可以在它们之间share authentication。即使它们托管在IIS中的单独应用程序池中,您甚至可以在它们之间share session个对象(不是说您应该使用会话,但这是另一个主题)。

就重用数据访问逻辑而言,根据正确您的现有WebForms应用程序的设计方式,您可以共享包含当前数据访问代码的程序集。如果您现有的应用程序设计不良,并且不同层之间的耦合很强,那么您可以将这些遗留代码包装在存储库后面,并且仍然至少重用数据库访问代码。

通过保持应用程序独立,您不需要使用对某些遗留代码的引用来污染新的ASP.NET MVC应用程序,并且您不需要污染现有的应用程序经典WebForms应用程序ASP.NET MVC特定的东西。