[英]Maintaining usercontrol state on dynamically added usercontrols
我有一个页面,该页面在page_init事件上动态创建多个用户控件,并将其添加到页面上的占位符。
用户控制自己将数据绑定到page_init上的转发器,以获取大约10个字符串的集合,该集合为每个项目输出一个div。
用户控件上还有一个“查看更多”链接按钮。 当我单击“查看更多”按钮时,它将另一个集合数据绑定到具有更多div的第二个转发器。
问题:在一个用户控件上单击“查看更多”后,如果在另一个用户控件上单击“查看更多”,则第一个用户控件上的“查看更多”数据将丢失。 我怀疑这是因为我没有重新添加控件,所以不会重新加载viewstate。
任何人都有任何想法,或者我只是想离开这个想法? 谢谢。
问题是您需要在每个回发上重新创建动态控件并重新创建它们的viewstate。 看一下本文动态Web控件,回发和查看状态
斯坦是对的。
当您单击链接时,发生回发并且您丢失了所有内容
我遇到了同样的问题,我的方法是在每次回发中重新创建dinamics UserControls。
本文http://www.codeproject.com/KB/user-controls/DynamicUC.aspx显示了一个示例,但我实现了这样的不同代码:
我的页面具有以下方法,可以将控件添加到PlaceHolder中。
private void AdicionarControlesDinamicamente(int idPergunta)
{
if (idPergunta > 0)
{
this.IdPerguntaAtual = idPergunta;
PerguntaAtual = new Pergunta(this.IdPerguntaAtual);
UserControl uc = LoadControl(PerguntaAtual.TipoResposta.CaminhoUserControl, PerguntaAtual.IdPergunta);
phResposta.Controls.Add(uc);
ViewState["ControlesDinamicosPerguntaCarregados"] = true;
}
}
注意这行代码ViewState [“ ControlesDinamicosPerguntaCarregados”] = true; 我存储的信息说,控件已经被添加到页面中。
然后一个ovveride的CreateChildControls来重新创建控件
protected override void CreateChildControls()
{
base.CreateChildControls();
// CHeck if the controls have been added to page, case true, i call IncluirControlesDinamicamente() again
// The Asp.Net will look into viewstate and wil find my controls there, so "he" will recreate their for me
if (ViewState["ControlesDinamicosPerguntaCarregados"] != null)
if (Page.IsPostBack)
AdicionarControlesDinamicamente(this.IdPerguntaAtual);
}
我认为这对您有帮助。
PS:对不起,我的英语。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.