2011-10-03 52 views
1

我在Asp.net中创建一个Web应用程序,我还是比较新的。我只是开始围绕ViewState的基础进行研究。在我的应用程序中,人们通过数据库进行搜索,并给他们缩小搜索范围的方法。当他们输入一个有效的搜索约束(例如:日期为10/1/11的日期)时,我动态添加另一组控件,允许他们添加另一个约束。我想保存上一个约束(一组控件)的内容,以便当它们进入下一个约束时,我仍然可以在网页上使用它。(ViewStates新增功能)将动态生成的控件保存到视图状态的最佳方式是什么?

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

我该怎么办?

非常感谢这么多人。

回答

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

+0

我试图您的解决方案,因为它似乎是一个相当容易的一个。我正在运行一个问题,只是将原始值保存到视图状态中。特别是,我试图将整数变量数保存到视图状态,所以我知道我创建了多少个动态控件。 ViewState.Add(“count”,count); 和 ViewState [“count”] = count; 都似乎没有工作。或者至少我的ViewState [“count”]!= null总是失败。任何想法我做错了什么? – Chad

+0

将值保存到ViewState中应该没有问题。你遇到什么问题? –

+0

它也可能有助于添加我试图从中加载的位置。我试着从Page_Init函数和Page_Load函数中加载计数值,但两次试验都没有成功。 – Chad

相关问题