2011-09-23 45 views
3

我在頁面加載事件中動態地在我的jQuery手風琴控件中創建了3個複選框,並且我還將文本框的CheckedChanged事件關聯。但事件並未解僱。我不確定這裏發生了什麼。請幫幫我。感謝並感謝您的反饋。我用來生成動態控制和關聯的事件複選框已更改事件未觸發動態添加控件

protected void Page_Load(object sender, EventArgs e) 
{ 
    dvAccordion.Controls.Clear(); 
    foreach (DataRow row in dataSetIP.Tables[0].Rows) 
    { 
     HtmlGenericControl tt= new HtmlGenericControl("H3"); 
     HtmlAnchor anc= new HtmlAnchor(); 
     HtmlGenericControl dvP= new HtmlGenericControl("DIV"); 
     dvP.InnerHtml = row["LD"].ToString(); 
     CheckBox chkTest = new CheckBox(); 
     if (!Page.IsPostBack) chkTest .ID = "chk" + row["SD"].ToString(); 
     else 
     { 
      string uniqueID = System.Guid.NewGuid().ToString().Substring(0, 5); 
      chkTest .ID = "chk" + uniqueID + row["SD"].ToString(); 
     } 
     chkTest.Text = row["SD"].ToString(); 
     chkTest.AutoPostBack = true; 
     chkTest.CheckedChanged += new EventHandler(chkTest _CheckedChanged); 
     chkTest.InputAttributes.Add("Value", row["ID"].ToString()); 

     anc.Controls.Add(chkTest); 
     tt.Controls.Add(anc); 
     dvAccordion.Controls.Add(tt); 
     dvAccordion.Controls.Add(dvP);   
    } 
} 

但CheckboxChanged事件在不觸發

代碼。

回答

1

這是您添加控件,ViewState和某些生命週期的問題。動態地添加完全參與整個生命週期的控件是一個複雜的主題,沒有更多的上下文,最好是閱讀Truly Understanding Dynamic Controls系列。

就你而言,我認爲你在ViewState初始化之後重新創建了下一頁加載的控件,所以在它需要將呼叫排隊到你的界限時它不知道綁定事件處理器。

+0

非常感謝你的回覆Mufasa,但是我沒有完全明白,請告訴我你什麼時候需要重新創建這些控件,以便我可以獲取ViewState。我試着把它放在Page_Init裏也沒有用。 – user788312

+0

@ user788312根據你想要做什麼,有幾種解決方案。要麼給我們提供更多的上下文,要麼我建議閱讀該系列文章,因爲它確實是幫助我弄清楚如何正確使用動態控件的唯一方法。而且,爲了什麼是值得的,我儘量避免在儘可能使用它們的時候使用它們 - 通常比付出更多的努力。例如,嘗試使用Repeater或ListView。 –

+0

Mufasa Thannks再次。這是上下文,我有一個JQuery手風琴,它是基於數據庫返回的行數動態構建的。我還需要在每個手風琴行中都有一個複選框,因爲我需要根據複選框中的選擇來填充網格中的數據。但是由於這些複選框是在手風琴內部動態創建的,所以複選框更改了事件,我所觸發的事情根本不會被調用。如果該事件被觸發,我可以檢查checked屬性的值並執行我的數據庫操作。我希望你知道了,如果不是,請讓我知道。感謝和欣賞你的反饋。 – user788312

0

嘗試添加Page_Init()事件中的控件(該事件在Page_Load()事件之前觸發)。

+0

我試過這樣做..但它也沒有工作 – user788312

相關問題