Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net SelectedIndexChanged事件在代码隐藏中创建dropdownlist时不触发_Asp.net - Fatal编程技术网

Asp.net SelectedIndexChanged事件在代码隐藏中创建dropdownlist时不触发

Asp.net SelectedIndexChanged事件在代码隐藏中创建dropdownlist时不触发,asp.net,Asp.net,我花了两天时间试图解决这个问题 我在代码隐藏中创建了一个dropDownList,在另一个dropDownList的selectIndexChange中,并使用placerHolder将这个新的dropDownList添加到页面,一切正常,但新的dropDownList selectIndexChange事件不会触发 下拉列表创建代码 dropDown = new DropDownList(); dropDown.AutoPostBack = true; dropDown.ID = idSubi

我花了两天时间试图解决这个问题

我在代码隐藏中创建了一个dropDownList,在另一个dropDownList的selectIndexChange中,并使用placerHolder将这个新的dropDownList添加到页面,一切正常,但新的dropDownList selectIndexChange事件不会触发

下拉列表创建代码

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中。。。