DropDownList不会在SelectedIndexChanged上回发

时间:2013-04-14 14:29:21

标签: c# asp.net

我正在尝试在更改所选项目时将DropDownList设置为AutoPostBack。为什么这不起作用,我有点疯狂。

有没有人有任何想法?请帮助

这是代码: -

 <asp:DropDownList ID="ddl_username" runat="server"
   AutoPostBack="True" 
   onselectedindexchanged="ddl_username_SelectedIndexChanged" 
  DataTextField="Shortname" DataValueField="ID">
  </asp:DropDownList>`



  protected void Page_Load(object sender, EventArgs e)
  {
    if (!IsPostBack)
    {
        Bind_Users();
    }
  }

 private DataSet Bind_Users()
 {
    DataSet ds;
    ds = cs.BindUsers();
    if (ds.Tables[0] != null)
    {
        if (ds.Tables[0].Rows.Count > 0)
        {
            ddl_username.DataSource = ds.Tables[0];
            ddl_username.DataTextField = "Shortname";
            ddl_username.DataValueField = "ID";
            ddl_username.DataBind();
            ListItem li = new ListItem();
            li.Text = "Select";
            li.Value = "-1";
            ddl_username.Items.Insert(0, li);
            ddl_username.SelectedIndex = 0;
        }
        //ddl_username.SelectedIndex = 0;
        //ddl_username.Text = "-----Select-----";
    }
    return ds;
}

2 个答案:

答案 0 :(得分:1)

您是否检查过重新发布后是否再次发生ddl的初始加载?只需在您的select-index-changed方法中添加一个调试断点,然后在oninit / page-load方法中添加一个调试断点 - 无论您将数据加载到ddl。 如果它在触发你的事件之前再次加载 - 你需要放一个

if(!IsPostBack)

在加载方法之前 - 比如:

if(!IsPostBack)
  this.MyDDL.DataSource = GetDatasourceForMyDDL();

答案 1 :(得分:0)

每次页面回发时都会调用

Page_Load,因此您必须将Bind_Users()放入

if(!IsPostBack)阻止,因为在Page_Load

之前调用了ddl_username_SelectedIndexChanged