asp.net – DropDownList OnSelectedIndexChange到第0个索引w /
我确实按照文章
TRULLY Understanding ViewState(伟大的文章顺便说一句)和填充我的下拉列表工作得很好.我甚至设置了一个OnSelectedIndexChange事件,它几乎同样激发.
我发现的问题是在选择第0个索引时不会触发SelectedIndexChanged事件.然而,它会做所有其他时间. 这是一些代码: <asp:DropDownList runat="server" ID="DropDownList1" EnableViewState="false" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" /> protected override void OnInit(EventArgs e) { this.DropDownList1.DataTextField = "Text"; this.DropDownList1.DataValueField = "Value"; this.DropDownList1.DataSource = fillQueueDropDown(); this.DropDownList1.DataBind(); base.OnInit(e); } protected void DropDownList1_SelectedIndexChanged(object sender,EventArgs e) { OnSelectedQueueChanged(e); } public void OnSelectedQueueChanged(EventArgs e) { // Do stuff. } public event EventHandler queueNamesChangedEvent; public void OnSelectedQueueChanged(EventArgs e) { if (queueNamesChangedEvent != null) queueNamesChangedEvent(this,e); } 我想我可以在Page_Load方法中进行某种类型的检查: if(ViewState["selectedIndexChangedFlag"] != 1) // raise OnSelectedChange event 或者我可以在OnInit()方法中设置一些东西,我每次都可以重新绑定这些数据吗? 请参阅,我的自定义EventHander引发一个事件,该事件由此控件所在的父页面捕获,以便父级可以使用新选择的值执行某些操作.并且这适用于所选索引>的所有情况. 0. 我在此控件中创建了一个属性,其中包含最近选择的索引,在这种情况下,我的父页面可以对每个Page_Load … dunno上的此属性值执行操作. 接受建议.或者如何强制此SelectedIndexChanged事件触发第0个索引选择. 解决方法
问题是您每次都在加载数据,这会重置所选索引.想象一下这是你的下拉菜单:
zero [selected] one two 然后在客户端中更改所选索引: zero one [selected] two 这将使用您的新索引(1)填充隐藏的输入__EVENTARGUMENT,并使用您的下拉列表的ID填充隐藏的输入__EVENTTARGET.现在服务器端代码启动并重新加载您的数据: zero [selected] one two “零”是选定的值,因为这是加载数据时的默认值.然后,ASP.NET在请求中查找__EVENTTARGET和__EVENTARGUMENT,找到您的下拉列表ID并找到新索引(1).现在您的下拉列表如下所示: zero one [selected] two 由于索引已更改,因此下拉列表会引发其SelectedIndexChanged事件,指示索引已更改.显然这是正在运行的部分,现在让我们看看为什么选择列表中的第一项不会引发事件. 现在让我们说我们仍然在其所处的状态下拉(选择“一个”并且选择的索引为1).当我们选择客户端列表中的第一个项目时会发生什么? 使用下拉列表的id和新索引(0)填充__EVENTTARGET和__EVENTARGUMENT.然后服务器将数据加载到下拉列表中,下拉列表现在再次显示如下: zero [selected] one two 请注意,由于您在事件触发之前重新加载了数据,因此索引已设置为0,因为这是默认值.现在,当您的事件触发并且下拉列表的选定索引设置为0时,下拉列表不会将此视为更改,因为所选索引(据其所知)尚未更改. 以下是解决问题的方法: protected override void OnLoad(EventArgs e) { base.OnLoad(e); if (!Page.IsPostBack) { this.DropDownList1.DataTextField = "Text"; this.DropDownList1.DataValueField = "Value"; this.DropDownList1.DataSource = fillQueueDropDown(); this.DropDownList1.DataBind(); } } 这样做只会在页面不是回发时将数据加载到下拉列表中.这意味着ViewState将为您维护数据以及所选索引,以便在您回发下拉列表时将新索引与您在客户端中看到的索引进行比较. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 在局部视图中Model为null
- asp.net – 选择性地将CSS应用于gridview中的一行
- .net – HttpContext.Request和Request之间的区别
- asp.net – 无法在嵌入式ASPX代码中引用动态对象
- .net-4.0 – 为什么有潜在危险的请求错误甚至ValidateReque
- asp.net – Global.asax的方法来自哪里?
- asp.net – 安装MvcScaffolding包时的NuGet执行策略错误
- .net – SqlDataSource与ObjectDataSource
- asp.net-mvc – 允许一个人一次使用帐户的可重用方式
- asp.net-mvc – 用于OpenID OAuth简单身份验证的ASP.NET MV
- 在asp.net按钮中添加图像和文本
- asp.net-mvc – ASP.NET web api – 设置自定义I
- asp.net – 实体框架Web配置文件
- asp.net-mvc – 首次加载时,如何/如何在MVC app中
- asp.net-mvc – DropDownListFor在编辑视图上不重
- asp.net-mvc-3 – 从MVC 3中使用Razor View引擎的
- 通过HTTPS在ASP.NET中安全的会话cookie
- asp.net-web-api – IExceptionHandler的多个实现
- .net – 在WebApi中,我应该在哪里调用ActionFilt
- asp.net-mvc – 应用程序池回收导致非常长的响应