1

我有一个以这种方式绑定的下拉列表:

protected void Page_Load(object sender, EventArgs e)
{
    //Can't write !Page.IsPostBack because this is a User control which doesn't  
    //exist at page load
    if (ddlConditionType.Items.Count == 0)  
        PopulateDDL();
}
private void PopulateDDL()
{
    MyDdl.DataSource = MyObjectList; //Containing A, B, C
    MyDdl.DataBind();
    MyDdl.Items.Insert(0, new ListItem(String.Empty, String.Empty));
}

预期的结果是包含这些项目的下拉列表:

  • 字符串.空
  • 一个
  • C

或者实际结果是

  • 一个
  • C

我已经设置AppendDataBoundItems = true,这是结果:

  • 字符串.空
  • 一个
  • C
  • 一个
  • C

看起来它是第一次绑定 ddl,添加项目,然后再次重新绑定。当然,如果我第二次绑定 ddl,我的项目中没有其他地方。

现在我找到了一个解决方法,如下所示:

MyObjectList.Insert(0,new MyObject()); //Which will result in a empty ddl item 
MyDdl.DataSource = MyObjectList;
MyDdl.DataBind();

我想了解那里发生了什么。

4

3 回答 3

0

在您的页面上:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
            MyUserControl.PopulateDDL();
    }
}

在您的用户控制下

public void PopulateDDL()
{
    MyDdl.DataSource = MyObjectList; //Containing A, B, C
    MyDdl.DataBind();
    MyDdl.Items.Insert(0, new ListItem(String.Empty, String.Empty));
}
于 2013-11-04T19:15:13.617 回答
0

在 DataBind 之前使用 Clear 方法,

MyDdl.Items.Clear();

你在哪里绑定下拉菜单?在 page_load 上?如果你想在 Page_Load 绑定你的下拉列表,你必须检查回发状态:

if (!Page.IsPostBack)
{
    MyDdl.DataSource = MyObjectList; //Containing A, B, C
    MyDdl.DataBind();
    MyDdl.Items.Insert(0, new ListItem(String.Empty, String.Empty));
}
于 2013-11-04T18:29:49.207 回答
0

嗨,发生这种情况是因为您没有像这样将您的方法放在回发中

    if (!IsPostBack)
    {

      PopulateDDL();
    }
于 2013-11-04T19:10:01.183 回答