Asp.net MVC是否真的消除了viewstate?

问题描述

| ASP.net Webforms的主要问题之一是viewstate机制,该机制需要花费很多精力,因为他将所有表单输入序列化并通过post命令发送。 在我正在阅读的书中,提到了MVC在Webforms上的主要优点之一是mvc不包含viewstate。听起来很酷,但是据我所见,mvc还会在post命令上发送所有输入(这是他使用绑定机制的唯一方法)。 那么区别是什么呢 ?您可以将其称为view state,也可以将其称为\“ binding \”,但是MVC和webforms的底线都是将所有输入序列化并在POST上将它们全部发送出去。 我错了吗 ?如果没有,有什么区别?     

解决方法

巨大差距。 Viewstate可能会变得很大。它保留不一定包含在表单数据中的值。想想GridViews和Label等。它们不在输入字段中,但可以通过ViewState持久化。在MVC中,确实没有持久性的概念。由您决定将数据返回到视图(尽管绑定机制使此操作相当容易)     ,ViewState与一般形式的POST不同。 POST时,您显然必须包括所有输入,否则服务器将无法处理数据。 ViewState存储有关控件的其他属性,例如颜色,数据绑定,文本值等。这些值被发送到浏览器并再次返回,以便维护页面上每个控件的状态,但它们不属于\发布时服务器正在处理“ data \”。     ,在WebForms中,您正在处理System.Web.UI.WebControls,并且所有控件都需要在viewstate内部存储一些数据 但是在MVC中,您正在处理本机html和http协议。您不需要那里的viewstate。 观看ASP.NET MVC的介绍视频: http://www.asp.net/mvc/videos/5-minute-introduction-to-aspnet-mvc     ,您打算如何处理任何形式的表单数据而不将值传递回服务器?这有点愚蠢。是的,过帐确实会将表单值传递给服务器,因为这是服务器处理它们的唯一方法。 Viewstate是一个字典,其中包含页面上每个控件的状态数据,该数据通过发布数据传递。 MVC没有viewstate,因此在发帖时只有表单数据的当前内容。没有页面状态,只有会话状态(存储在服务器上)。 这是完全不同的事情。     ,我不会重复别人所说的,但我会补充说WebForms是一个使用伪有状态范式的框架。与具有状态的桌面应用程序非常相似,WebForms是将某些状态带入继承的无状态Web的很好的例子。实现此目标的主要机制是ViewState。 ViewState不仅是当前控件的序列化内容,而且还可以用于序列化和维护模型的状态。这就是使WebForms具有状态的原因。 另一方面,MVC返回了更为经典的无状态框架的传统,因此不需要ViewState。我不同意“模型绑定”与ViewState是相同的,因为“模型绑定”不尊重任何以前的状态(除非您从会话/应用程序缓存中手动还原了模型状态,等等),所以模型是托管创建的仅在请求的生存期内。而在WebForms模型中,您可以序列化模型以提供应用程序状态。     ,我认为mvc并不能消除它。仍然需要以向导页面的类型保留来自其他帖子的数据。这里是链接如何以视图状态方式进行操作!当然,有人会说您可以手动将数据保留在隐藏字段中,但是这需要大量工作,并且不能防止数据篡改。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...