0

当所选项目发生更改时,我试图将 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;
}
4

2 回答 2

1

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

if(!IsPostBack)

在加载方法之前 - 比如:

if(!IsPostBack)
  this.MyDDL.DataSource = GetDatasourceForMyDDL();
于 2013-04-14T14:41:07.953 回答
0

Page_Load每次页面都调用回发,所以你必须在Bind_Users()里面放一个

if(!IsPostBack)block ,因为Page_Load之前调用过ddl_username_SelectedIndexChanged

于 2013-04-14T14:49:33.470 回答