当Request对象中包含所有字段值时,为什么需要ViewState?

时间:2011-01-28 07:50:08

标签: c# asp.net request viewstate

每当我们提交表单时,所有字段值都会发布到服务器并在Request对象中可用。理想情况下,可以使用相同的对象来读取值并使用它执行任何操作。

那么,为什么我们需要ViewState来保存字段的值?

请原谅我的无知,我想我错过了一些非常明显的事情,但是无法弄清楚是什么。

3 个答案:

答案 0 :(得分:5)

在ASP.Net中引入ViewState的最明显原因是为了允许类似winform的编程模型(基于事件)。

当您有服务器端控件(例如文本框)时,发送回浏览器的html页面包含:

  • 控件的初始值,在viewstate =>中编码浏览器/用户无法修改此值
  • 控件本身=>浏览器/用户可以修改其状态

当表单提交回服务器时,ASP.Net底层引擎会将控件新值与存储在ViewState中的初始值进行比较。如果它不相同,将触发OnChange事件,您可以像在winform应用程序中那样附加到它。

答案 1 :(得分:2)

根据V4Vendetta,您可以在控件上禁用ViewState,但是您需要手动开发“ASP经典样式”,例如如果您需要将用户保留在页面上并且表单验证失败,则需要将初始值设置回用户上次设置的值,否则用户数据将丢失。

通过在ViewState中保留此信息,ASP Net控件可以更优雅地处理此问题。但是,如果您永远不需要再次渲染控件,或者您每次都不需要渲染控件数据而不需要其先前的状态(例如分页网格),那么为控件禁用ViewState将为您节省带宽。

ViewState here的一个很好的解释。

答案 2 :(得分:1)

Viewstate是一种ASP.NET状态管理技术,用于维护往返服务器之间的当前页面状态。 如果您不想要此功能,可以禁用它,它完全基于您实现页面的方式。

<%@ Page EnableViewState=”false”%>