Asp.net SelectedIndexChanged事件在代码隐藏中创建dropdownlist时不触发
我花了两天时间试图解决这个问题 我在代码隐藏中创建了一个dropDownList,在另一个dropDownList的selectIndexChange中,并使用placerHolder将这个新的dropDownList添加到页面,一切正常,但新的dropDownList selectIndexChange事件不会触发 下拉列表创建代码Asp.net SelectedIndexChanged事件在代码隐藏中创建dropdownlist时不触发,asp.net,Asp.net,我花了两天时间试图解决这个问题 我在代码隐藏中创建了一个dropDownList,在另一个dropDownList的selectIndexChange中,并使用placerHolder将这个新的dropDownList添加到页面,一切正常,但新的dropDownList selectIndexChange事件不会触发 下拉列表创建代码 dropDown = new DropDownList(); dropDown.AutoPostBack = true; dropDown.ID = idSubi
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>"));
没人能帮忙吗
感谢您在event selectIndexChange中创建了新的下拉列表。太晚了。尝试在页面加载或数据绑定事件中创建下拉列表。使用可见性来显示/隐藏ddl idSubistema通过这种方式创建控件,您正在使事情变得非常困难。尽管ASP.NETWebForms通过引发事件等假装像WinForms一样工作,但事实并非如此。HTTP是一种无状态协议。因此,每次用户请求一个ASPX页面,每次回发,整个页面都需要由ASP.Net重新构建 有一个通过init、load、pre-render等运行的控件,如果在此生命周期中未创建控件,则该控件将不存在,也不会呈现给客户端。通过以您正在执行的方式动态创建控件,您需要确保每次加载页面时都在正确的时间创建控件。这种方法也使得处理Viewstate变得有点棘手,不管怎样,这是一种痛苦 您可能有一个非常复杂的页面,因此创建这样的控件是绝对必要的,但更可能的是,您最好以正常方式在ASPX标记中编写第二个下拉列表。这将确保它始终可用。然后,您可以有条件地将数据绑定到它,并切换其Visible属性。如果此属性为false,则根本不会将控件呈现给客户端
一般来说,在ASP.Net中,如果您以这种方式创建控件,这表明您将事情复杂化了。不总是这样,但更多的时候是这样。通过firebug对其进行分析,并查看在DropDownList中更改selectedItem是否会触发任何javascript事件?此代码出现在哪种方法中,例如PageInit?你不使用声明性标记有什么原因吗?@Graham,他在他的问题中回答了这个问题:我在代码隐藏中创建了一个dropDownList,在另一个dropDownList的selectIndexChange中,他有一个dropDownList,它位于标记中并引发SelectedIndexChanged,在这个事件的事件处理程序方法中,他创建了第二个dropDownList。所以代码在方法someDropDownList\u SelectedIndexChanged中。。。