簡體   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