[英]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));
}
预期的结果是包含这些项目的下拉列表:
或者实际结果是
我已经设置AppendDataBoundItems = true
,这是结果:
看起来它第一次绑定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.