按照你的问题顺序:
1//没有。 Web 表单基于“智能 UI”模式,即您通过编写事件处理程序来控制应用程序。智能 UI 有它的问题,但是当完全基于桌面时它可以正常工作,因为没有在框架中引入任何主要的“虚构”来使其工作。然而,对于通过无状态 HTTP 工作的 Web,引入了一个主要的虚构,本质上是以 ViewState 的形式,当页面发送到客户端浏览器时,它保存所有控件的状态。结果,Web 表单在您的应用程序中引入了一层复杂性,仅用于维持这种虚构。 MVC 消除了这种虚构。
小说本质上是说:我们将假装在我们和客户端之间不存在 HTTP。
2//MVC 消除了虚构并为您提供了裸 HTTP。然而,它更多地基于前端控制器而不是页面控制器模式,因为页面控制器模式使得独立于 Http 请求测试控制器变得困难,而 MVC 专门设计用于使控制器独立于 HTTP 请求可测试。换句话说,MVC 旨在支持在控制器上进行单元测试,而不是集成测试。
MVC 专注于模型与视图的分离,而 Webforms/Smart UI 并没有做出这种区分。
我想你可以说,为了从 ASP.NET MVC 中删除页面控制器,ASP.NET 将 HTTP 对控制器的影响重构为“正交属性”,这不是我被引导相信的方式页面控制器模式有效。但是,不要引用我的话,我是这些东西的学生,而不是专家。
3//不,绝对不是!如上所述,网络表单是虚构的智能用户界面,而不是任何形状或形式的 MVC。您可以通过一些箍来使它们成为某种 MVC ish(a la Dino Esposito),但这又是一个虚构的。如果您拥有 ASP.NET MVC,为什么还要沉迷于小说?
最后的侧翼。我从 webforms 切换到 mvc 的原因是 Wizard Server Control。它的“事件模型”是一个残酷的东西,面对我需要实现的一切(更不用说其他属性、方法的令人窒息的扩散......糟糕!)。
在 10 天内,我编写了一个基本的 WizardController,现在我的向导是美丽、优雅和简单的东西。我很高兴地放弃了 3 个月的 web 表单向导工作,将它们转换为我的新迷你向导框架。太糟糕了。