问题登记ASP.NET ViewState

时间:2011-07-21 10:42:51

标签: asp.net viewstate

我一直在阅读这篇优秀文章http://msdn.microsoft.com/en-us/library/ms972976.aspx,该文章说ViewState不负责表单字段在回发之间保留其值。那么表单字段值永远不会存储在ViewState中吗?

EDITED:我的意思是表单字段是ASP.NET控件,如TextBox,Dropdownlist等。

EDITED:如果用户在ASP.NET文本框中输入一个值并提交表单,那么新页面仍然具有该值的文本框,我认为这是因为ViewState,但文章说它不是这样!

5 个答案:

答案 0 :(得分:2)

正如您所说,表单值不存储在视图状态中。 (例如)两个回发之间保留TextBox控件文本的原因是因为它实现了IPostBackDataHandler - 契约并自动将Request.Form集合中的键映射到控件的相应属性。这两种机制经常混淆。

请参阅http://www.mikesdotnetting.com/Article/65/ViewState-form-fields-labels-and-Javascript以获得更好的解释。

答案 1 :(得分:1)

文本字段在ViewState中没有值,因为它们的值是通过HTTP POST显示的(请参阅Request.Form)并在Page_Load之前恢复到控件。

DropDownLists确实使用ViewState存储其内容。

答案 2 :(得分:0)

只有Asp.Net Control才会存储在ViewState中。没有html字段。

所以

<asp:TextBox id="tb1" runat="server" />

将起作用

<input type="text" id="tb1" />

无效。

答案 3 :(得分:0)

  

那么表单字段值永远不会存储在ViewState中吗?

如dknaack所述:否

但您可能还想查看ControlState,因为ViewState可以被禁用。

答案 4 :(得分:0)

viewstate的目的是跟踪webcontrols中的“更改”。作为开发人员,您有责任确保每次加载页面时都重新创建控件的“初始”状态。然后,asp .net机制确定在回发场景中发生的更改,以决定应在服务器端触发哪些事件。

有关ASP .Net回发机制如何工作以及Viewstate适合的位置的概述,请查看我最初在SO上提出的这个问题;

How does Postback Work?