![](/img/trans.png)
[英]ASP.NET / C#: DropDownList SelectedIndexChanged event not firing
[英]asp.net c# prevent firing selectedindexchanged event while changing index from serverside code
我在同一个aspx页面上有两个下拉列表控件
<asp:DropDownList ID="ddlM" runat="server" Width="123px" AutoPostBack="True" OnSelectedIndexChanged="ddlM_SelectedIndexChanged">
</asp:DropDownList>
<asp:DropDownList ID="ddlC" runat="server" Width="123px" AutoPostBack="True" OnSelectedIndexChanged="ddlC_SelectedIndexChanged">
</asp:DropDownList>
OnSelectedIndexChanged的C#代码如下:
protected void ddlC_SelectedIndexChanged(object sender, EventArgs e)
{
ddlM.SelectedIndex = 0;
ViewState["ddlC"] = true;
ViewState["ddlM"] = false;
BindPGrid();
}
protected void ddlM_SelectedIndexChanged(object sender, EventArgs e)
{
ddlC.SelectedIndex = 0;
ViewState["ddlC"] = false;
ViewState["ddlM"] = true;
BindPGrid();
}
两者都使用一些服务器端代码填充数据库记录项。 现在,OnSelectedIndexChanged事件“ddlM”我想选择“ddlC”的第一个索引但是没有触发事件ddlC_SelectedIndexChanged。 对于“ddlC”和“ddlC”的OnSelectedIndexChanged事件一样,我想选择“ddlM”的第一个索引但是没有触发事件ddlM_SelectedIndexChanged。 对不起它发射事件。 我怎么办呢?
谢谢
或者,您可以从控件中删除并重新添加SelectedIndexChanged事件处理程序
ddlM.SelectedIndexChanged -= ddlM_SelectedIndexChanged;
ddlM.SelectedIndex = 0;
ViewState["ddlC"] = false;
ViewState["ddlM"] = true;
BindPGrid();
ddlM.SelectedIndexChanged += ddlM_SelectedIndexChanged;
然后你不必乱用全局标志
在这种情况下,我们创建一个全局bool
标志,并在更改SelectedIndexChanged
之前将其值设置为true
。 而在其他Control的SelectedIndexChanged
检查其值是否为true。 如果是真的,我们会在活动之外返回。 并在外面再次更改标志值。 确保始终将标志值更改回false,否则如果该事件由同一控件生成,则永远不会触发。
boool flag = false;
protected void ddlC_SelectedIndexChanged(object sender, EventArgs e)
{
flag = true;
ddlM.SelectedIndex = 0;
flag = false;
ViewState["ddlC"] = true;
ViewState["ddlM"] = false;
BindPGrid();
}
protected void ddlM_SelectedIndexChanged(object sender, EventArgs e)
{
if(flag)
return;
ddlC.SelectedIndex = 0;
ViewState["ddlC"] = false;
ViewState["ddlM"] = true;
BindPGrid();
}
或者你可以删除像这样的事件处理程序
protected void ddlC_SelectedIndexChanged(object sender, EventArgs e)
{
ddlM.SelectedIndexChanged -= ddlM_SelectedIndexChanged;
ddlM.SelectedIndex = 0;
ddlM.SelectedIndexChanged += ddlM_SelectedIndexChanged;
ViewState["ddlC"] = true;
ViewState["ddlM"] = false;
BindPGrid();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.