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