Viewstate vs Postback

Aar*_*nLS 4 asp.net custom-server-controls page-lifecycle

我想回答我自己的问题,但我想确保我正确理解.我最初认为当用户在表单中提供值时,在回发时,值是作为Viewstate的一部分提交的,因为TextBox.Text是viewstate的一部分.现在我发现用户提供的值实际上不会在OnLoad事件之后应用于控件.这使我感到困惑,因为我认为viewstate在OnLoad之前(或调用Controls.Add()时)被加载到控件中.我已经浏览了页面上的文档并控制了生命周期几次,我现在才意识到处理回发数据有不同的步骤(这一步没有出现在很多文档中:(

1)因此,在OnLoad事件之后应用用户在字段中输入的值的回发数据,并且在OnLoad事件之前应用Viewstate数据?

2)基本上所有这些意味着在回发时服务器获取TextBox.Text属性的两个值,Viewstate中的属性,就像前一个请求中的"旧"值,以及用户提供的新值.表格?

3).net框架是否应用与Viewstate相同的回发数据,因为它通过它的ID属性找到适当的控件?这很重要,因为我正在动态创建控件,我甚至可能有超时更改结构的表单,需要考虑如何处理ID.到目前为止,我还没有设置ID属性,一切正常,但事情可能会更复杂.

4)在客户端根本没有修改viewstate数据吗?或者视图状态与服务器在先前请求中发送的内容相同(假设没有篡改)?我的印象曾经是服务器将所有控件属性编码到视图状态中,而在客户端提交表单时,视图状态字段被解码,修改,编码并提交给服务器并进行修改.我假设有一堆javascript为我做这一切.现在我觉得我错了.相反,Viewstate似乎永远不会在客户端更改,并且所有客户端更改都在回发数据中,以便下一个请求服务器加载视图状态,加载回发,并在下一个响应中提供新的更新视图状态?

Gre*_*reg 12

1)两者都在加载之前加载
2)基本上,是
3)首先应用ViewState,然后应用Post Data

引用Scott Mitchell(见下文)

动态添加的控件必须以编程方式在每次访问页面时添加到Web页面.添加这些控件的最佳时间是在页面生命周期的初始化阶段,该阶段发生在加载视图状态阶段之前.也就是说,我们希望在加载视图状态阶段到达之前完成控制层次结构.因此,最好在代码隐藏类中为Page类的Init事件创建一个事件处理程序,并在那里添加动态控件.

4)除非你在框外做某事,否则ViewState永远不会被修改为客户端."ViewState"是一个HTML表单字段,在服务器端进行处理.

下面是一些图片了解ASP.NET视图状态斯科特·米切尔,可以帮助你.

alt text http://i.msdn.microsoft.com/ms972976.viewstate_fig02%28en-us,MSDN.10%29.gif alt text http://i.msdn.microsoft.com/ms972976.viewstate_fig04%28en-us ,MSDN.10%29.gif

奖金阅读材料:http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx