I have the following markup:
<asp:DropDownList ID="dd1" AutoPostBack="true" runat="server">
<asp:ListItem Value="1">1</asp:ListItem>
<asp:ListItem Value="2">2</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="dd2" AutoPostBack="true" onchange="javascript:return true;" runat="server">
<asp:ListItem Value="1">3</asp:ListItem>
<asp:ListItem Value="2">4</asp:ListItem>
</asp:DropDownList>
连接到这个:
Protected Sub changed1(sender As Object, e As EventArgs) Handles dd1.SelectedIndexChanged
End Sub
Protected Sub changed2(sender As Object, e As EventArgs) Handles dd2.SelectedIndexChanged
End Sub
当dd2的索引改变时,您会希望它的处理程序被触发,对吗?但是,实际上并没有触发。相反,它被“排队”,并在dd1的处理程序在其索引更改时触发后才被触发。如果您将
onchange="javascript:return true;"
从dd2中删除,则会正常触发。有人知道这里发生了什么吗?
编辑:我的第一个答案是,使用下拉列表的返回表达式与按钮的单击事件不同,但我发誓我以前使用过下拉列表。
更新:我能够通过JavaScript强制触发服务器事件:
__doPostBack("<%=dd2.ClientID %>", '');
我不明白为什么我必须这样做,但它有效。然而,我仍然想用其他方法,所以如果有人知道,请告诉我,这样我就可以将您标记为答案。
CausesValidation
设置为 false。否则,只需将AutoPostBack
设置为 true,一切都会顺利的。 - James Johnson