如果我要存储一段简单的数据(例如整数或字符串),我可能会选择将其存储在 ViewState 中,或使用 HiddenField 控件。

为什么我会选择其中之一而不是另一个?

视图状态

  • 用户很难解码(认为并非不可能),这可能是可取的

隐藏域

  • 可以在 JavaScript 中使用值

还有其他优点和缺点吗?

有帮助吗?

解决方案

事实并非如此,ViewState 实际上存储在隐藏字段中,因此唯一真正的区别是编码。

除非您需要使用 JavaScript 操作该值,或者您希望完全关闭此页面上的 ViewState,否则我会使用 ViewState。主要是因为有第三方工具(像这个)它理解 ViewState 而不会理解您的自定义隐藏字段。

其他提示

从可维护性的角度来看,我会使用 ViewState。您需要编写的代码更少,这可以归结为软件中的故障点更少。这也意味着您之后的任何开发人员都将更轻松地维护您的解决方案。

如果您对此不太满意,请在页面上编写一个属性访问器,充当外观以从 ViewState 检索值。稍后,如果您觉得有必要将其转换为隐藏字段,则访问器可以为代码的其余部分无缝地处理该切换。请确保您记录了这样做的原因。

ViewState 存储在页面本身中,因此会增加页面大小,并可能导致 性能问题.

我们还可以将应用程序配置为 将视图状态保存到服务器上 而不是在页面本身上,这可以防止某些安全问题。

乔米特

隐藏字段在页面上不可见,并且可以在视图源中查看其值,但视图状态的值已编码并且不可读。

隐藏字段值发布在下一页上。(笔记:使用 server.transfer 获取隐藏字段的值)。

视图状态仅在您所在的页面或回发的页面上有效。通过隐藏字段,您可以使用 Page 对象的 PreviousPage 方法访问导航到的下一页上的数据(以及其他数据),如下所示:

string term = ((TextBox)Page.PreviousPage.FindControl("txtSearchTerm")).Text;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top