ASP.NET中DropDownList重复绑定且SelectedIndexChanged事件未触发问题
解决ASP.NET DropDownList选择变更重绑定&事件不触发问题
严格控制数据绑定时机
必须只在首次加载(非回发状态)时绑定DropDownList,VB后台代码要这么写:Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Not IsPostBack Then ' 这里写DropDownList的绑定逻辑,比如: ' DropDownList1.DataSource = yourDataSource ' DropDownList1.DataTextField = "TextColumn" ' DropDownList1.DataValueField = "ValueColumn" ' DropDownList1.DataBind() End If End Sub要是每次回发都执行绑定,会直接覆盖用户的选择,导致事件触发失效。
必须开启AutoPostBack
ASPX页面里的DropDownList一定要加AutoPostBack="True",不然选择变更不会触发回发,事件根本跑不起来。示例代码:<asp:DropDownList ID="DropDownList1" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="True"> </asp:DropDownList>你之前移除这个属性的操作是错的,这是触发回发的必要条件。
检查ViewState是否正常启用
页面和DropDownList的EnableViewState不要设为False,默认是True,禁用ViewState会导致控件无法保存选择状态,回发后直接回到初始值,看起来就像重新绑定了。验证事件绑定的正确性
一是ASPX里的OnSelectedIndexChanged属性值要和后台事件方法名完全一致;二是后台方法的签名要符合要求,VB代码示例:Protected Sub DropDownList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DropDownList1.SelectedIndexChanged ' 这里写你的事件处理逻辑 End Sub要么用
Handles关键字绑定事件,要么在ASPX里指定事件名,两者选其一即可,别出现冲突。排查页面层级的干扰因素
如果用了母版页,检查母版页有没有禁用ViewState或者拦截回发的逻辑;如果DropDownList在用户控件里,要确保事件能正确传递到父页面。
内容的提问来源于stack exchange,提问作者Dhanish
相关产品推荐
相关产品推荐

