ViewState或HiddenField

时间:2009-01-08 13:05:30

标签: asp.net viewstate hidden-field

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

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

视图状态

  • 用户难以解码(以为不是不可能),这可能是理想的

HiddenField

  • 可以在JavaScript中使用值

还有其他优点和缺点吗?

5 个答案:

答案 0 :(得分:6)

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

除非您需要使用JavaScript操作该值,或者您希望完全关闭此页面上的ViewState,否则我将使用ViewState。主要是因为有第三方工具(like this one)了解ViewState并且无法理解您的自定义隐藏字段。

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

ViewState存储在页面本身中,因此会增加页面大小,并可能导致performance issues

此外,我们可以将应用程序配置为save the viewstate on server而不是页面本身,这可能会避免某些安全问题。

Jomit

答案 3 :(得分:0)

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

string term = ((TextBox)Page.PreviousPage.FindControl("txtSearchTerm")).Text;

答案 4 :(得分:0)

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

隐藏字段值将在下一页发布。 (注意:使用server.transfer获取隐藏字段的值)。