Asp.net下拉列表默认值未显示

时间:2013-11-04 18:16:24

标签: c# asp.net drop-down-menu

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

protected void Page_Load(object sender, EventArgs e)
{
    //Can't write !Page.IsPostBack because this is a User control witch 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));
}

预期结果是下拉这些项目:

  • 的String.Empty
  • A
  • C

或实际结果是

  • A
  • C

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

  • 的String.Empty
  • A
  • C
  • A
  • C

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

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

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

我想了解那里发生的事情。

3 个答案:

答案 0 :(得分:0)

在DataBind之前使用Clear Method

MyDdl.Items.Clear();

你在哪里绑定下拉列表?在页面加载? 如果你想在Page_Load上绑定你的下拉列表,你已经检查了回发状态:

if (!Page.IsPostBack)
{
    MyDdl.DataSource = MyObjectList; //Containing A, B, C
    MyDdl.DataBind();
    MyDdl.Items.Insert(0, new ListItem(String.Empty, String.Empty));
}

答案 1 :(得分:0)

嗨,这是因为你没有把你的方法放在回发中,就像这样

    if (!IsPostBack)
    {

      PopulateDDL();
    }

答案 2 :(得分: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));
}