asp.net - 为什么viewstate被序列化为表单中的隐藏字段而不保存在服务器上?

标签 asp.net webforms viewstate

我对 WebForms 很陌生,我正在尝试了解 ViewState。 AFAIK 今天,它在回发到同一页面时保持对 UI 的修改。但是为什么它将状态(= 存储的修改)发送到客户端和 不保存在服务器上 节省 CPU 周期和带宽?

我理解的东西完全错误吗?

最佳答案

顾名思义, View 状态是与 View 有内在联系的东西,试图在保持这种关系的同时单独管理它并不是一件容易的事情。

您需要存储每页的 View 状态,因此您仍然需要向客户端发送一个 ID,以便能够在回发时获得正确的 View 状态。另一个严重的问题是您向客户端发送了一个页面,但您不知道客户端何时或是否将该页面回发到服务器,因此您至少需要在 session 过期之前存储 View 状态。

这可能会导致服务器资源的浪费,因为所有这些 View 状态都是为可能永远不会回发到服务器的用户存储的。如果您保持 View 状态 slim ,您会同意存储它的最佳位置是将它与 View 一起发送。

最后,如果您对客户端上的 View 状态仍然不满意,您可以覆盖 SavePageStateToPersistenceMedium LoadPageStateFromPersistenceMedium 页面的方法并将其保存到另一个媒体。我已经听到很多人提示客户端上的 View 状态,大多数时候我只是告诉他们继续在服务器上实现对另一种介质的持久性......但是,我相信没有人做过,可能是因为它很复杂你最终会得到一个不那么干净的解决方案。

关于asp.net - 为什么viewstate被序列化为表单中的隐藏字段而不保存在服务器上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11966708/

相关文章:

c# - ASP.NET - 基于文本框按键的客户端 Gridview 数据过滤

asp.net - 可用作 exe 文件参数的文本长度是否有限制?

c# - 如何调整标签的字符间距

asp.net - 我如何在 ASP.NET ie 中获取客户端详细信息。浏览器、分辨率和操作系统?

jquery - ASP.NET WebForms/jQuery : jQuery . 按钮上的单击事件使按钮的服务器端 OnClick 事件无法触发

ASP.NET MVC - 控件如何保持其状态

html - 在表格中标记事物的正确方法是什么?

css - 在同一行显示 3 个 div(图片库+文本+Webform)

asp.net - 切换到 ASP.NET 3.5,DropDownList 不记得动态添加的项目

ASP.NET:压缩 ViewState