asp.net - View 状态与回传

标签 asp.net custom-server-controls page-lifecycle

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

1)所以回发数据,用户类型到字段中的值,是在 OnLoad 事件之后应用的,而 Viewstate 数据是在 OnLoad 事件之前应用的?

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

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

4) View 状态数据是否在客户端被修改过?或者 View 状态是否与服务器在前一个请求中发送的相同(假设没有篡改)?以前给我的印象是服务端把所有的控件属性编码到viewstate中,而在client端用户提交表单的时候,viewstate字段被解码、修改、编码,修改后提交给服务端。我认为有一堆 javascript 为我做这一切。现在我想我错了。相反, View 状态似乎永远不会在客户端更改,并且所有客户端更改都在回发数据中,以便服务器加载 View 状态,加载回发并在下一个响应中提供新的更新 View 状态?

最佳答案

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

引用 Scott Mitchell(见下文)

dynamically added controls must be programmatically added to the Web page on each and every page visit. The best time to add these controls is during the initialization stage of the page life cycle, which occurs before the load view state stage. That is, we want to have the control hierarchy complete before the load view state stage arrives. For this reason, it is best to create an event handler for the Page class's Init event in your code-behind class, and add your dynamic controls there.



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

这是 Understanding ASP.NET View State 来自 Scott Mitchell 的一些图片,可能会对您有所帮助。

alt text
(来源: microsoft.com )

alt text
(来源: microsoft.com )

额外阅读 Material :http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx

关于asp.net - View 状态与回传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2953587/

相关文章:

javascript - FB按钮 "like"非常慢

asp.net - EF6(代码优先)、MVC、Unity 和没有存储库的服务层

javascript - 在 Web 应用程序 (ASP.NET 2.0) 中显示更多按钮的工具栏

带有子控件的asp.net Web服务器控件,事件未触发

asp.net - 何时在 WebForms 页面生命周期中实例化 DbContext?

asp.net - 页面生命周期中 session 状态、应用程序状态在哪里?

javascript - 如何从html表格中的多个单元格中获取复选框?

asp.net - ASP.NET 中自定义组合中的子控件初始化

c# - 自定义控件 : Scripts not loaded when control is hidden on pageload

c# - 如何在母版页的第一个页面加载中只调用一次方法