代码之家  ›  专栏  ›  技术社区  ›  James Hulse

静态定义控件或在页面加载时动态创建控件的主要区别是什么?

  •  3
  • James Hulse  · 技术社区  · 14 年前

    我正在处理一个项目,该项目在page\u load事件中为窗体动态创建控件,从数据库中加载它们的当前值,并在用户单击continue按钮时保存它们的值(使用FindControl)。

    当我在.aspx页面中静态添加一个控件,并按照相同的步骤在页面加载中加载值并按按钮保存时,我发现该值无法正确保存。似乎它不会保存,因为在页面加载之后触发click事件,所以post back的页面加载还原了该值,并且用户输入的值没有保存。

    奇怪的是,通过将控件更改为与页面上的所有其他控件一样动态创建,并保持加载和保存不变,现在就可以工作了。即使页面加载仍然使用旧的数据库值创建控件。

    4 回复  |  直到 14 年前
        1
  •  1
  •   eglasius    14 年前

    确保:

    • 在静态控件之后添加动态控件。或者至少它们被添加到不同的容器中。控件集合中的位置可能会影响ViewState,尽管它看起来不像您的场景/因为您提到的似乎更多地是关于当前文章中的值。
    • 保存发生在页面加载之后,以响应相应的事件。
        2
  •  2
  •   Sidharth Panwar    14 年前

    静态页面控件与动态页面控件一样创建。你的页面负载可能会有所不同。无论何时回发所有控件 重新创建 这意味着它们是用它们的初始值创建的。这是因为在创建控件之后asp.net扔掉控件/对象。

    每次回发时,它们都会被创建和初始化,并在过程中丢失状态。

    但是在创建控件之后 Asp.Net加载随请求一起发送的任何viewstate

    控件的viewstate未启用 EnableViewState属性为true 控制的一部分。

    或者,当你加载页面时, . 正在失去所有的控制数据。如果你能发布页面加载的逻辑,它可能会得到澄清。

        3
  •  1
  •   Marko    14 年前

    我过去也遇到过类似的问题(实际上有好几次),但对我帮助最大的是理解ASP.NET页面生命周期。

    微软已经 an article this post 所罗门·沙弗真的把一切都搞清楚了。

    我建议阅读这两篇文章,然后再问一些关于特定状态、何时加载/保存数据等的问题。。

    希望这有帮助。

        4
  •  1
  •   Arseni Mourzenko    14 年前

    请注意,您可能需要使用 Page.IsPostBack

    private void Page_Load()
    {
        if (!this.IsPostBack)
        {
            // Assign values to the controls.
        }
    }