ASP.NET C#:DropDownList SelectedIndexChanged事件不是FIring

时间:2012-06-04 21:34:39

标签: c# asp.net drop-down-menu

我的设置如下: 在PageLoad事件中,我按如下方式初始化dropDownList:

SONumList = new DropDownList();
SONumList.DataSource = SOList;
SONumList.DataBind();
SONumList.Height = new Unit("19px");
SONumList.SelectedIndexChanged += (ChooseSODropDown);
SONumList.AutoPostBack = true;
Panel1.Controls.Add(SONumList);

在更改SONumList上的SelectedIndex时触发的ChooseSODropDown事件中,我创建另一个名为PNum的DropDownList:

PNumList = new DropDownList();
PNumList.DataSource = dataSource2;
PNumList.DataTextField = "Part";
PNumList.DataValueField = "Part";
PNumList.DataBind();
PNumList.Height = new Unit("19px");
PNumList.SelectedIndexChanged += ChoosePNumDropDown;
PNumList.AutoPostBack = true;
Panel1.Controls.Add(PNumList);

虽然PNum框本身正确显示并且数据被适当地绑定,但是即使页面进行回发,ChoosePNumDropDown事件也不会触发。我在函数的开头尝试了一个断点,它根本不会触发。

是否有某些原因导致我无法将事件绑定到另一个事件触发内的对象?

1 个答案:

答案 0 :(得分:2)

简短的回答是,当ChooseSODropDown被解雇时,将现有控件绑定到更多事件处理程序为时已晚。这是因为控件的先前状态是从 OnLoad 中的 viewstate 反序列化的,并且该初始状态用于触发 onchange 事件被解雇了。

我相信你必须初始化OnLoad中的所有控件,包括ChoosePNumDropDown的事件处理程序,并将任何所需的逻辑移动到该事件处理程序中。据我所知,没有办法在现有的事件处理程序中添加更多的事件处理程序,并期望在同一个回发中触发它。

我建议您阅读Page Lifecycle以了解事件的确切处理方式。