asp.net c#在从服务器端代码更改索引时阻止触发selectedindexchanged事件

我在同一个aspx页面上有两个下拉列表控件

    

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(); }