繁体   English   中英

Asp.net 下拉列表默认值未出现

[英]Asp.net dropdown list default value not appearing

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

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

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

在数据绑定之前使用清除方法,

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM