问题描述
|
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并不能消除它。仍然需要以向导页面的类型保留来自其他帖子的数据。这里是链接如何以视图状态方式进行操作!当然,有人会说您可以手动将数据保留在隐藏字段中,但是这需要大量工作,并且不能防止数据篡改。