按钮单击会消除动态创建的控件

时间:2011-02-18 20:17:52

标签: asp.net

我有一个webform,其中在下拉列表的SelectedIndexChanged事件期间在Panel控件中生成一组控件。一切正常。

但是,当我在这些控件中输入值并单击我的提交按钮时,控件将与我输入的数据一起被删除。

我只能在SelectedIndexChanged事件中创建控件,因为这是我获取信息以生成动态控件的地方。

我想做的是将这些控件与我输入的数据一起显示,并使用我输入的数据做其他事情(就像它在WinForms中发生的那样。)

这可行吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

每次发生回发时,您都在使用页面类的新实例。在上一次回发期间添加到页面的动态控件在该回发的页面呈现给浏览器后立即转到垃圾收集器。您需要在每次回发时重新创建动态控件。

在Session或ViewState中保存“控制集”的数量,以便您可以在Page_Init期间使用适当的ID(例如,附带indexOfControl)重新生成它们。

以下是一些其他信息:

  • View State and Dynamically Added Controls *
  • ASP.NET Page Life Cycle Overview

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

答案 1 :(得分:0)

这是使Webforms看起来像Winforms失败的尝试之一。

使用Webforms,您需要完成何时创建控件的整个过程。我相信所有的控件都需要在PageLoad结束的某个时候重新创建。您可以使用一个或两个页面加载后的事件,但一般来说,PageLoad是一个安全的时间来创建控件。

实际上,在ASP.NET使用ViewState / Browser中的数据填充控件之前,需要创建控件。