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



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

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();

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

使用 Clear Method Befor DataBind,

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));
}
嗨,

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

    if (!IsPostBack)
    {
      PopulateDDL();
    }
在您的

页面上:

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));
}

最新更新