繁体   English   中英

在动态添加的用户控件上维护用户控件状态

[英]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.

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