VB.NET旧aspx页面DropDownList的SelectedIndexChanged事件无法触发求助
问题排查及解决方案
1. 修正HTML嵌套错误
当前页面代码存在标签嵌套顺序错误,UpdatePanel的ContentTemplate关闭标签放在了<td>、<tr>、<table>关闭标签之前,会导致控件树解析异常,事件无法正常绑定:
<!-- 错误写法 --> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <table align ="center" style="width: 304px; height: 54px;" ><tr> <td align ="right" ><asp:Label runat="server" Text="Libro:" ID="Label1" Font-Names="MS Reference Sans Serif" Font-Size="10pt"></asp:Label> </td><td align ="left" ><asp:DropDownList ID="Existe2" runat="server" AutoPostBack="true" Font-Names="MS Reference Sans Serif" Font-Size="9pt" Width="183px"> </asp:DropDownList> </ContentTemplate> </asp:UpdatePanel> </td></tr></table>
修正为正确的嵌套顺序,所有内容标签都放在ContentTemplate内部,同时修正事件绑定属性的拼写错误(正确属性为OnSelectedIndexChanged,而非OnSelectedChanged):
<asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <table align ="center" style="width: 304px; height: 54px;" ><tr> <td align ="right" ><asp:Label runat="server" Text="Libro:" ID="Label1" Font-Names="MS Reference Sans Serif" Font-Size="10pt"></asp:Label> </td><td align ="left" ><asp:DropDownList ID="Existe2" runat="server" AutoPostBack="true" OnSelectedIndexChanged="Existe2_SelectedIndexChanged" Font-Names="MS Reference Sans Serif" Font-Size="9pt" Width="183px"> </asp:DropDownList> </td></tr></table> </ContentTemplate> </asp:UpdatePanel>
2. 修正Page_Load中的下拉框绑定逻辑
如果在Page_Load方法中给Existe2绑定下拉选项,必须添加非回发判断,否则每次异步回发都会重置下拉框的选中值,导致SelectedIndexChanged事件判定选中项无变化,不会触发:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Not IsPostBack Then ' 在此处编写Existe2的下拉选项绑定逻辑 End If End Sub
3. 修正异步回发下的脚本注册方法
页面使用UpdatePanel做局部异步刷新,ClientScript.RegisterStartupScript仅能在整页回发时生效,异步回发场景下要改用ScriptManager的对应方法:
Protected Sub Existe2_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Existe2.SelectedIndexChanged Dim myScript as String = "window.alert('Cambio el selector');" ScriptManager.RegisterStartupScript(Me, Me.GetType(), "myScript", myScript, True) End Sub
内容的提问来源于stack exchange,提问作者Luis Enrique Ibañez Alvarez
相关产品推荐
相关产品推荐

