在asp.net中不必要地触发下拉事件



我有两个下拉菜单,比如ddl1和ddl2,在我的aspx页面上有一个网格视图,比如Home.aspx。

  protected void ddl1_SelectedIndexChanged(object sender, EventArgs e)
    {
        DataTable dtFeedFiles;
        try
        {
            ddl2.DataSource = dtFeedFiles;
            ddl2.DataBind();
        }
        catch (Exception ex)
        {
            Response.Redirect(ConfigurationManager.AppSettings["Errorpage"]);
        }
     }
    protected void ddl2_SelectedIndexChanged(object sender, EventArgs e)
    {
        DataTable dtFeed;
        try
        {
           gridview.DataSource = dtFeed;
           gridview.DataBind();
        }
        catch (Exception ex)
        {
            Response.Redirect(ConfigurationManager.AppSettings["Errorpage"]);
        }
     }

在ddl1_selectedIndexChanged事件中,我正在加载ddl2。在ddl2_selectedIndexChangd事件中,我们正在加载一个网格。

ddl2_selectedIndexChanged事件中发生错误,我正在将其重定向到Errorpage.aspx。

现在,当我单击浏览器返回按钮时,它会显示Home.aspx,当我更改dll1时,ddl1_selectedIndexChanged和ddl2_selectedIndexChangd事件都会触发。为什么会这样?

当您在ddl1的事件中更改ddl2的记录源时,它将触发SelectedIndexChanged事件。这是故意的,就好像你ddl2中选择了某个东西,那么这个选择就会被删除。

通常你需要有一个保护条款,比如

if (ddl2.SelectedIndex < 0)
{
   // return the gridview to an uninitialized state?
   return;
}

以便在实际上没有为任何下拉列表选择索引的情况下防止事件继续执行。

最新更新