2010-12-09 72 views
2

兩天我嘗試解決此問題。SelectedIndexChanged事件不會在代碼隱藏中創建下拉列表時觸發

我在代碼隱藏中,在另一個dropDownList的selectIndexChange中創建了dropDownList,並使用placerHolder將此新的dropDownList添加到了頁面中,並將其更改爲ok,但新的下拉列表selectIndexChange事件不開火! DROPDOWNLIST創造

代碼

dropDown = new DropDownList(); 
dropDown.AutoPostBack = true; 
dropDown.ID = idSubistema; 
dropDown.Width = 400; 
dropDown.CssClass = "controltext"; 
dropDown.DataValueField = "IDNivel"; 
dropDown.DataTextField = "NIVEL"; 
dropDown.EnableViewState = true; 
dropDown.DataSource = 
    DBLibray.DefinitionIndicadores.spSelect_FillCombosWithNivelByIdParent(
     ref dataConnector, 
     Convert.ToInt32(idSubistema)); 

dropDown.DataBind(); 

dropDown.SelectedIndexChanged += new EventHandler(indexChange); 
//dropDown.PreRender += new EventHandler(dropDown_PreRender); 

placeHolderForCombos.Controls.Add(new LiteralControl("<div>")); 
placeHolderForCombos.Controls.Add(lb); 
placeHolderForCombos.Controls.Add(new LiteralControl("<br>")); 
placeHolderForCombos.Controls.Add(dropDown); 
placeHolderForCombos.Controls.Add(new LiteralControl("</div>")); 
placeHolderForCombos.Controls.Add(new LiteralControl("<br>")); 

不能任何這方面的幫助?

感謝

+1

通過螢火蟲的配置文件,看看是否更改DropDownList中selectedItem觸發任何JavaScript事件? – 2010-12-09 12:44:59

回答

4

通過以這種方式創建控件,你正在讓自己變得非常困難。儘管ASP.Net WebForms假裝像WinForms一樣通過引發事件等工作,但事實並非如此。 HTTP是一種無狀態協議。因此,每次用戶請求一個ASPX頁面,每回發,整個頁面需要通過ASP.Net重新構建。

有一個page lifecycle可以運行(init,load,pre-render等),並且如果在這個生命週期中沒有創建一個控件,它將不會存在,並且不會呈現給客戶端。通過以您所做的方式「動態」創建控件,您需要確保它們在正確的時間創建,每次加載頁面時都會加載。這種方法也使ViewState處理起來更棘手,無論如何這是一種痛苦。

您可能有一個非常複雜的頁面,使得像這樣創建控件是絕對必要的,但更有可能您會更好地以常規方式在ASPX標記中編寫第二個下拉列表。這將確保它始終可用。然後,您可以有條件地綁定數據綁定,並切換其Visible屬性。如果此屬性爲false,則該控件將不會呈現給客戶端。

與ASP.Net一般情況下,如果您是以這種方式創建控件,則表示您已經過度複雜化了。並非總是如此,但往往不是。

1

你正在創建事件 「selectIndexChange」 新的下拉列表。太晚了。嘗試在Page_Load或數據綁定事件中創建下拉菜單。使用可見性來顯示/隱藏你的ddl「idSubistema」

相關問題