Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当请求对象中包含所有字段值时,为什么需要ViewState?_C#_Asp.net_Request_Viewstate - Fatal编程技术网

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

C# 当请求对象中包含所有字段值时,为什么需要ViewState?,c#,asp.net,request,viewstate,C#,Asp.net,Request,Viewstate,无论何时提交表单,所有字段值都会发布到服务器,并且在请求对象中可用。理想情况下,可以使用同一个对象读取值并使用它执行任何操作 那么,为什么我们需要ViewState来保存字段的值呢 请原谅我的无知,我想我错过了一段很明显的时间,但我不知道是什么。Viewstate是引入的ASP.NET状态管理技术,用于在往返服务器之间维护当前页面状态。 如果您不想使用此功能,可以禁用它,这完全取决于您实现页面的方式 <%@ Page EnableViewState=”false”%> 根据V4V

无论何时提交表单,所有字段值都会发布到服务器,并且在请求对象中可用。理想情况下,可以使用同一个对象读取值并使用它执行任何操作

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


请原谅我的无知,我想我错过了一段很明显的时间,但我不知道是什么。

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

<%@ Page EnableViewState=”false”%> 

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

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


对ViewState的一个很好的解释。

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

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

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

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

我理解这一点,但我只是想弄清楚它最初引入的原因。当必须使用ViewState时,是否有任何特殊情况?要维护回发的状态,以便保留值,否则您必须在页面加载时始终设置它。这里有另一篇关于ViewState的好文章,上面评论中的链接已过期,但Internet Archive较早地保存了它,Robert Boedigheimer在2003年10月发表的一篇文章中取消了在HTML中存储viewstate。这似乎是完美的服务器维护视图状态中缺少的部分。(我想这可能是缺失的,需要用现代的单页应用程序来恢复,以使事件处理程序更改地址栏中的路径,用户希望重新加载页面?)我相信,事后看来,大多数人认为ViewState是一个错误(尤其是在每次单击按钮时都会上下序列化)。然而,在2000年代早期,它确实允许许多“WinForms”开发人员以最小的学习曲线快速进入功能网站,因此我想它达到了它的目的。没错,在现代应用程序中,状态将由SPA客户端状态维护,通过服务器上的分布式、无状态、可扩展持久性(数据库、分布式缓存等)和客户端交互的附加状态将在需要时得到丰富。其他事件如按钮单击、鼠标单击/移动又如何?您能告诉我asp.net framework检测这些事件的方式吗?