gpt4 book ai didi

asp.net - 为什么 ASP.NET 动态控件即使添加到 Page_Load 中也能保持 ViewState?

转载 作者:行者123 更新时间:2023-12-04 08:28:12 24 4
gpt4 key购买 nike

我做了一些与动态控件和 ViewState 相关的研究。

我读到,为了保留动态控件的 ViewState,您必须将其添加到 Page_Init 事件中。这是有道理的,因为 PageLifeCycle 是:

  • 初始化。
  • 加载 View 状态。
  • 加载回传数据。
  • 加载。
  • RaisePostback 事件。
  • 保存 View 状态。
  • 使成为。

  • 但是我做了一个测试应用程序,我看到即使我在 Page_Load 事件中添加控件而不是之后,ViewState 和属性值也会保留。从这开始,我只发现了相互矛盾的信息。有人说控件可能会 catch PageLifeCycle 其他说你必须在 Page_Init 中添加它们。有人可以为我澄清这一点吗?

    同样在 msdn 我发现:

    Note You may be able to get away with loading your controls in the Page_Load event handler and maintaining the view state properly. It all depends on whether or not you are setting any properties of the dynamically loaded controls programmatically and, if so, when you're doing it relative to the Controls.Add(dynamicControl) line. A thorough discussion of this is a bit beyond the scope of this article, but the reason it may work is because the Controls property's Add() method recursively loads the parent's view state into its children, even though the load view state stage has passed.



    但我并没有真正完全理解这一点,所以我希望有人能解释一下。先感谢您。

    最佳答案

    此代码将在操作中演示它:

    protected void Page_Load(object sender, EventArgs e)
    {
    Button b1 = new Button();
    Button b2 = new Button();
    if (!IsPostBack)
    {
    b1.Text = "Button1";
    }
    this.form1.Controls.Add(b1);
    this.form1.Controls.Add(b2);
    if (!IsPostBack)
    {
    b2.Text = "Button2";
    }
    }

    因此,如果您在将控件添加到表单后对其进行修改,它会保留其 View 状态,但是如果您在将其添加到表单之前对其进行修改,则文本不会使其进入 View 状态。这就是发生的事情 - 究竟为什么会这样是另一个问题(这实际上与我阅读文档的想法相反)。

    编辑
    我忘了提及 - 本质上这是因为当控件通过 Controls.Add() 添加到控件树时,控件会在整个页面生命周期中播放以“ catch ”页面 - 关于此的文章数不胜数,因为没有什么是直截了当的。

    关于asp.net - 为什么 ASP.NET 动态控件即使添加到 Page_Load 中也能保持 ViewState?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9548435/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com