ViewState 或 HiddenField
-
05-07-2019 - |
题
如果我要存储一段简单的数据(例如整数或字符串),我可能会选择将其存储在 ViewState 中,或使用 HiddenField 控件。
为什么我会选择其中之一而不是另一个?
视图状态
- 用户很难解码(认为并非不可能),这可能是可取的
隐藏域
- 可以在 JavaScript 中使用值
还有其他优点和缺点吗?
解决方案
事实并非如此,ViewState 实际上存储在隐藏字段中,因此唯一真正的区别是编码。
除非您需要使用 JavaScript 操作该值,或者您希望完全关闭此页面上的 ViewState,否则我会使用 ViewState。主要是因为有第三方工具(像这个)它理解 ViewState 而不会理解您的自定义隐藏字段。
其他提示
从可维护性的角度来看,我会使用 ViewState。您需要编写的代码更少,这可以归结为软件中的故障点更少。这也意味着您之后的任何开发人员都将更轻松地维护您的解决方案。
如果您对此不太满意,请在页面上编写一个属性访问器,充当外观以从 ViewState 检索值。稍后,如果您觉得有必要将其转换为隐藏字段,则访问器可以为代码的其余部分无缝地处理该切换。请确保您记录了这样做的原因。
隐藏字段在页面上不可见,并且可以在视图源中查看其值,但视图状态的值已编码并且不可读。
隐藏字段值发布在下一页上。(笔记:使用 server.transfer 获取隐藏字段的值)。
视图状态仅在您所在的页面或回发的页面上有效。通过隐藏字段,您可以使用 Page 对象的 PreviousPage 方法访问导航到的下一页上的数据(以及其他数据),如下所示:
string term = ((TextBox)Page.PreviousPage.FindControl("txtSearchTerm")).Text;
不隶属于 StackOverflow