请考虑以下事项:
dim dropdownlist1 as new dropdownlist
dim dropdownlist2 as new dropdownlist
dim dropdownlist3 as new dropdownlist
dropdownlist1.AutoPostBack = true
dropdownlist2.AutoPostBack = true
dropdownlist3.AutoPostBack = true
AddHandler dropdownlist1.SelectedIndexChanged, AddressOf SomeEvent
AddHandler dropdownlist2.SelectedIndexChanged, AddressOf SomeEvent
AddHandler dropdownlist3.SelectedIndexChanged, AddressOf SomeEvent
修改 无论选择哪个下拉列表,我都希望触发事件。 修改:
当任何下拉列表的选择发生变化时,SomeEvent会按预期触发。但是,如果说DropdownList2有选择,那么我使用DropDownList1或DropdownList3进行选择,然后SomeEvent再次触发。 导致此行为的原因是,如何只举一次该事件?
我怀疑当恢复动态创建的下拉列表的视图状态并恢复选择时,事件将被触发,因为从技术上讲,所选索引在重新创建控件时确实发生了变化。我怀疑这是因为该事件会为每个下拉列表触发...
答案 0 :(得分:2)
在事件连线后以编程方式更改该属性的值时,将触发该事件。这可能是多次调用函数的原因。这就是在加载viewstate之后需要添加任何事件处理程序的原因。每次调用方法时,请尝试查看堆栈跟踪,以查找发生这种情况的位置。
答案 1 :(得分:1)
这就是我所拥有的,它运作良好(抱歉,我是一名C#家伙)
protected void Page_Load(object sender, EventArgs e)
{
DropDownList objlist1 = new DropDownList();
DropDownList objlist2 = new DropDownList();
DropDownList objlist3 = new DropDownList();
objlist1.Items.Add("aaa");
objlist1.Items.Add("bbb");
objlist2.Items.Add("cc");
objlist2.Items.Add("ddd");
objlist3.Items.Add("eee");
objlist3.Items.Add("fff");
objlist1.AutoPostBack = true;
objlist2.AutoPostBack = true;
objlist3.AutoPostBack = true;
objlist1.SelectedIndexChanged += new EventHandler(objlist1_SelectedIndexChanged);
objlist2.SelectedIndexChanged += new EventHandler(objlist1_SelectedIndexChanged);
objlist3.SelectedIndexChanged += new EventHandler(objlist1_SelectedIndexChanged);
form1.Controls.Add(objlist1);
form1.Controls.Add(objlist2);
form1.Controls.Add(objlist3);
}
void objlist1_SelectedIndexChanged(object sender, EventArgs e)
{
Response.Write("change happened");
}
每次下拉更改时,它都会写入更改(使用断点进行检查,只发生一次)
答案 2 :(得分:0)
不确定这是否有帮助,但是您在页面生命周期中创建控件的位置是什么?
我通常喜欢在Page Init期间调用EnsureChildControls,因此所有控件都是在加载ViewState之前创建的,并且肯定是在回发处理之前创建的。