2009-07-29 60 views
0

我在运行时动态添加了一些复选框,并且我需要知道下次是在重新加载它们时是否检查它们。 我从存储在ViewState中的列表中加载复选框值。 问题是:我何时保存或检查Checked的值? 我尝试了事件处置复选框和占位符我添加复选框,但它没有被解雇。即当我放置一个断点时,它并没有停下来。那么有什么建议?如何以及何时为动态复选框保存“选中”属性的值

这是一个示例代码,但我不认为这是必要的:

void LoadKeywords() 
    { 
     bool add = true; 
     foreach (string s in (ViewState["keywords"] as List<string>)) 
      if (s == ddlKeywords.SelectedItem.Text) 
      { 
       add = false; 
       continue; 
      } 

     if (add) 
      (ViewState["keywords"] as List<string>).Add(ddlKeywords.SelectedItem.Text); 



     foreach (string s in (ViewState["keywords"] as List<string>)) 
     { 
      CheckBox kw = new CheckBox(); 
      kw.Disposed += new EventHandler(kw_Disposed); 
      kw.Text = s; 
      PlaceHolderKeywords.Controls.Add(kw); 
     } 
    } 

回答

2

如果您在运行时动态添加控件,则必须确保在加载ViewState之前将这些控件填充到页面的Control集合中。这是为了使每个复选框的状态可以从Viewstate重新水化。例如,页面加载事件太晚了。

通常,您可以在Init事件(加载视图状态之前)期间动态添加CheckBox控件,然后在Load事件(加载视图状态之后)时读取Checkbox控件中的值。

如:

protected override void OnInit(EventArgs e) 
{ 
    //load the controls before ViewState is loaded 
    base.OnInit(e); 
    for (int i = 0; i < 3; i++) 
    { 
     CheckBox cb = new CheckBox(); 
     cb = new CheckBox(); 
     cb.ID = "KeyWord" + i.ToString(); 
     cb.Text = "Key Word" 
     MyPlaceHolder.Controls.Add(new CheckBox()); 
    } 
} 

//this could also be a button click event perhaps? 
protected override void OnLoad(EventArgs e) 
{ 
    base.OnLoad(e); 
    if (Page.IsPostBack) 
    { 
     //read the checkbox values 
     foreach(CheckBox control in MyPlaceHolder.Controls) 
     { 
      bool isChecked = control.Checked; 
      string keyword = control.Text; 

      //do something with these two values 
     } 
    } 
} 

希望帮助

**** ****编辑 忘了提,这显然只是演示代码 - 你需要充实它。

有关ASP.Net中的动态控制呈现的更多信息,请查看this article on 4Guys

欲了解ASP.Net页面生命周期的更多信息,请查看MSDN

+0

谢谢你。我开始理解你的想法,但是什么是人口稠密? – 2009-07-30 09:12:41

0

如何:

尝试添加JavaScript代码,用于处理()检查, u能得到通过使用document.findElementById(ID)复选框,然后将复选框的值存储到具有runat =“server”属性的隐藏域中。

什么时候: 要么在页面加载,检查页面是否是postback(),并检查hiddenfield(s)值(S)。或添加一个提交按钮(并将其事件置于代码后面,runat =“server”属性)。

希望这可以帮助你。

+0

如果我诚实的话,这不是一个好的选择 - 如果你尊重页面生命周期,ASP.Net会照顾所有的东西,而不需要手动干预 – 2009-07-29 11:37:08

相关问题