我一直认为 ASP.NET MVC 框架是一个坏名字,因为它是一种设计模式。
问题应该是:
什么时候可以在 ASP.NET Web 表单上使用 ASP.NET MVC Framework?
开发者体验
a) ASP.NET Web 窗体试图从开发人员那里抽象出 HTTP 的无状态特性。 GUI 元素的状态和/或数据存储在 Viewstate/Session 中。每个人 Form 都会对自己进行回发,基本上是模仿 WinForm 事件驱动设计的行为。
b) HTML GUI 元素由可重复使用的控件进一步抽象,从第三方供应商处购买。这有助于开发人员在没有太多 JavaScript 和 HTML/HTTP 知识的情况下将 HTML 应用程序粘合在一起。基本上类似于您开发 VB / WinForms 的方式
c) 您可以很好地在 ASP.NET 网络表单中实现 MVC/MVP 模式。查看 Patterns and Practices Web Client 软件工厂,看看他们是如何做到的。
d) 使用 WebForms 开发时,您通常会根据服务器上的用户反馈更改 HTML(视图)。大多数事件(用户单击按钮、编辑字段)在服务器上以连续回发循环的方式处理,执行所谓的 ASP.NET 页面生命周期。
VS
浏览器控制的视图(不知道怎么称呼它)。基于用户输入对 HTML 的所有更改都在浏览器中处理。您将使用 Javascript 操作 DOM。
注意:我基于这样一个事实,即 ASP.NET MVC 很可能是由基本的 HTML + Ajax 驱动的
我个人会如何在它们之间进行选择(从未使用过 MVC,只是阅读它)
1) 如果我要使用 Ajax、Jquery、EXT JS 类型库构建一个纯无状态前端,那么 ASP.NET MVC 似乎更合适。尽管您可以在 ASP.NET Webforms 中构建它,但这似乎毫无意义,因为您没有利用回发模型和服务器控件。
2) 如果我被要求构建一个新的基本 Web 应用程序,我会坚持使用 ASP.NET Webforms,因为我已经熟悉它并且了解整个页面的生命周期。
3) 如果我被要求构建一个 Web 2.0(讨厌这个词)以获得下一代用户体验,我可能会选择 ASP.NET MVC,并使用 JQuery / ASP.NET Ajax 客户端控件。
4) 许多公司已经建立了一套可靠的 WebForm 控件以供使用。以纯粹的无状态 ajaxy 方式重建它们会很昂贵:)