C# Asp.net下拉列表默认值未出现
我用这种方式绑定了一个下拉列表:C# Asp.net下拉列表默认值未出现,c#,asp.net,drop-down-menu,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 which doesn't //exist at page load if (ddlConditionType.Items.Count == 0) PopulateDDL(); } p
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));
}
预期结果将包含以下项目的下拉列表:
字符串。空
A.
B
C
或者实际结果是
A.
B
C
我已将AppendDataBoundItems设置为true,结果如下:
字符串。空
A.
B
C
A.
B
C
看起来它是第一次绑定ddl,添加该项,然后再次绑定它。当然,如果我再次绑定ddl,我的项目中就没有其他地方了
目前,我找到了一个解决方法,如下所示:
MyObjectList.Insert(0,new MyObject()); //Which will result in a empty ddl item
MyDdl.DataSource = MyObjectList;
MyDdl.DataBind();
我想了解那里发生了什么。在数据绑定之前使用Clear方法
MyDdl.Items.Clear();
你把下拉列表绑在哪里?在页面上加载?
如果要在页面加载时绑定下拉列表,请检查回发状态:
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));
}
在哪种情况下执行该代码?你能显示整个事件代码吗?ddl在一个用户控件中,我在Page_load事件中加载它。查看编辑。我已尝试使用MyDdl.Items.Clear;但它没有起作用。ddl位于用户控件中,因此我无法检查Page.IsPostBack,因为第一次加载页面时ddl不存在,因此我有if-ddlConditionType.Items.Count==0PopulateDDL。