(ViewStates新增功能)将动态生成的控件保存到视图状态的最佳方法是什么?

时间:2011-10-03 13:50:19

标签: asp.net dynamic controls viewstate

我正在Asp.net中创建一个Web应用程序,我还是比较新的。我刚刚开始围绕ViewState的基础知识。在我的应用程序中,人们正在搜索数据库,并为他们提供了缩小搜索范围的方法。当他们输入有效的搜索约束时(例如:日期超过10/1/11),我动态添加另一组控件,允许他们添加另一个约束。我想保存前一个约束(一组控件)的内容,这样当他们输入下一个约束时我仍然可以在网页上拥有它。

如果它有任何区别,一个约束集包含一个属性下拉列表,一些文字控件和一个或两个文本字段,具体取决于从下拉列表中选择的属性。

我该怎么做?

非常感谢你们。

2 个答案:

答案 0 :(得分:2)

跟踪动态控件的视图状态的最简单方法是在OnInit中重新创建控件,并在每次回发页面时为控件分配相同的ID。如果控件在每次创建时都分配了相同的ID,则在加载ViewState时,将重新填充控件。

protected override void OnInit(EventArgs e)
{
    TextBox txt = new TextBox();
    txt.ID = "txt1";
    this.Controls.Add(txt);
}

修改

为了简化操作,请尝试使用DynamicControlsPlaceHolder。只需将控件放在页面上,它就会在幕后保留控件及其值:

http://www.denisbauer.com/ASPNETControls/DynamicControlsPlaceholder.aspx

答案 1 :(得分:1)

点击此链接:

动态控件的ViewState仍由ASP.NET框架维护。只需确保在init或preinit期间添加它们,因为viewstate是为init和load阶段之间的每个控件加载的。