Asp.net (viewstate新增)将动态生成的控件保存到viewstate的最佳方式是什么?

Asp.net (viewstate新增)将动态生成的控件保存到viewstate的最佳方式是什么?,asp.net,dynamic,controls,viewstate,Asp.net,Dynamic,Controls,Viewstate,我正在Asp.net中创建一个web应用程序,我还是个新手。我刚刚开始了解ViewState的基本知识。在我的应用程序中,人们通过数据库进行搜索,我为他们提供了缩小搜索范围的方法。当他们输入了有效的搜索约束(例如:日期超过11年10月1日)时,我会动态添加另一组控件,允许他们添加另一个约束。我想保存上一个约束(一组控件)的内容,这样当它们进入下一个约束时,我仍然可以在网页上保留它 如果有任何区别,一个约束集由属性下拉列表、几个文本控件和一个或两个文本字段组成,具体取决于从下拉列表中选择的属性 我

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

如果有任何区别,一个约束集由属性下拉列表、几个文本控件和一个或两个文本字段组成,具体取决于从下拉列表中选择的属性

我该怎么办

非常感谢各位。

查看此链接:


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

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

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

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


我正在尝试您的解决方案,因为它看起来相当简单。我正在运行一个简单地将原语值保存到视图状态的问题。特别是,我试图将整数变量计数保存到viewstate中,以便知道创建了多少个动态控件。添加(“计数”,计数);和ViewState[“count”]=count;两者似乎都不起作用。或者至少我的ViewState[“count”]!=null总是失败。知道我做错了什么吗?你应该不会有问题将值保存到ViewState。您遇到了什么问题?这也可能有助于添加我尝试加载的位置。我尝试从Page_Init函数和Page_Load函数加载计数值,但两次尝试都没有成功。它似乎实际上没有保存。ViewState[“计数”]的计算结果始终为空。即使我将其保存为第一条注释中的属性。通过调试,我了解到这些值实际上已添加到ViewState变量中,但在回发过程中似乎不会持久。我是否需要显式保存ViewState?是否有一个特定的位置我应该向ViewState结构添加键值对?目前,我正在一个按钮单击事件中添加到ViewState。