2009-07-29 58 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

相關問題