1

我有一个 asp.net 列表框,如果它不是回发,它会在 Page_Load 事件中填充。每当用户从 asp.net 列表框中选择任何项目时,我都需要根据从列表框中选择的项目数来加载用户控件。我已经能够加载多个控件;但是,我的问题是那些新添加的控件在回发时会消失。

这是我的示例代码

 if (!this.IsPostback)
    {
bindListBox();

    }

private void bindListBox()
{
lstAgenyList .DataSource = GetAgenyList();
lstAgenyList.DataTextField = "Id";
lstAgenyList.DataValueField = "Name";
lstAgenyList.DataBind();
}

protected void lstAgenyList_OnSelectedIndexChanged(object sender, EventArgs e)
{

foreach(Item in lstAgenyList.items) {
if(item.Selected)
{
addControls(item.Text, item.Value);
}
}

}

private void addControls(string itemName, string itemValue)
{
var control = this.LoadControl("~/Controls/a.ascx");
control.id= itemName.Trim() + itemValue + "Controls_";
this.agenyListPlaceHolder.Controls.add(control);

}

所以我向你们提出的问题是,在 asp.net 网络表单中实现这样的逻辑的最佳选择是什么。

4

2 回答 2

0

控件消失是因为我们有责任维护动态添加的控件的状态,您想尝试一下内容占位

于 2013-08-23T03:50:45.363 回答
0

它与 PlaceHolder 和动态添加的控件有关。

几乎相同问题的答案在这里: http ://forums.asp.net/t/1623719.aspx

基本上,占位符中的所有内容都会在回发时丢失,您必须在 PreInit 事件期间从隐藏字段、Request.Form 或 ViewState 重新将其添加回其中。

于 2013-08-23T03:29:13.337 回答