我一直在阅读这篇优秀文章http://msdn.microsoft.com/en-us/library/ms972976.aspx,该文章说ViewState不负责表单字段在回发之间保留其值。那么表单字段值永远不会存储在ViewState中吗?
EDITED:我的意思是表单字段是ASP.NET控件,如TextBox,Dropdownlist等。
EDITED:如果用户在ASP.NET文本框中输入一个值并提交表单,那么新页面仍然具有该值的文本框,我认为这是因为ViewState,但文章说它不是这样!
答案 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上提出的这个问题;