【发布时间】:2011-02-26 13:41:42
【问题描述】:
我想我有点回答了我自己的问题,但我想确保我理解正确。我最初认为,当用户在表单中提供值时,在回发时这些值是作为 Viewstate 的一部分提交的,因为 TextBox.Text 是 viewstate 的一部分。现在我发现用户提供的值实际上直到 OnLoad 事件之后才应用于控件。这让我很困惑,因为我认为视图状态是在 OnLoad 之前(或在调用 Controls.Add() 时)加载到控件中的。我已经浏览了页面上的文档并控制生命周期几次,我现在才意识到处理回发数据有一个不同的步骤(这个步骤没有出现在很多文档中:(
1) 所以回发数据,即用户输入到字段中的值,是在 OnLoad 事件之后应用的,而 Viewstate 数据是在 OnLoad 事件之前应用的?
2) 基本上所有这一切意味着在回发时,服务器会为 TextBox.Text 属性获取两个值,一个在 Viewstate 中,类似于上一个请求中的“旧”值,而新值由表单中的用户?
3) .net 框架是否应用与 Viewstate 相同的回发数据,因为它通过其 ID 属性找到适当的控件?这很重要,因为我正在动态创建控件,我什至可能有表单会随着时间的推移而改变结构,并且需要考虑如何处理 ID。到目前为止,我还没有设置 ID 属性,一切正常,但以后可能会更复杂。
4) 视图状态数据是否在客户端被修改过?或者视图状态是否与服务器在上一个请求中发送的相同(假设没有篡改)?我以前的印象是服务端将所有的控件属性编码到viewstate中,而在客户端,当用户提交表单的时候,viewstate字段被解码、修改、编码,修改后提交给服务端。我以为有一堆 javascript 为我做这一切。现在我想我错了。相反,客户端的视图状态似乎永远不会改变,所有客户端的更改都在回发数据中,这样服务器的下一个请求会加载视图状态,加载回发,并在下一个响应中提供新的更新视图状态?
【问题讨论】:
标签: asp.net custom-server-controls page-lifecycle