2009-09-24 22 views
1

我有一個WebControl,我想動態地添加一個HiddenField。ASP.Net - 如何從其他WebControl添加HiddenField並對其進行維護?

我試過下面的例子:Click here,但由於事實this.Page.Form在Page Init事件中爲null,所以不起作用。

我試過以下,但該值永遠保持:

HiddenField hd_IsDirty = new HiddenField(); 

protected override void OnInit(EventArgs e) 
{ 

    this.Controls.Add(hd_IsDirty); 
    hd_IsDirty.ID = "hd_IsDirty"; 

    base.OnInit(e); 

} 

回答

2

以下工作:

創建控制每一次(好像壞了!):

HiddenField hd_IsDirty = new HiddenField(); 

告訴頁的控制需要了ControlState-的OnInit:

this.Page.RegisterRequiresControlState(this); 

覆蓋的ControlState方法:

protected override object SaveControlState() 
{ 

    object obj = base.SaveControlState(); 

    if (!string.IsNullOrEmpty(hd_IsDirty.Value)) 
    { 
     if (obj != null) 
     { 
      return new Pair(obj, hd_IsDirty.Value); 
     } 
     else 
     { 
      return hd_IsDirty.Value; 
     } 
    } 
    else 
    { 
     return obj; 
    } 
} 

protected override void LoadControlState(object state) 
{ 
    if (state != null) 
    { 
     Pair p = state as Pair; 
     if (p != null) 
     { 
      base.LoadControlState(p.First); 
      hd_IsDirty.Value = (string)p.Second; 
     } 
     else 
     { 
      if (state is string) 
      { 
       hd_IsDirty.Value = (string)state; 
      } 
      else 
      { 
       base.LoadControlState(state); 
      } 
     } 
    } 
} 
0

看到這個answer這個question

答案會告訴你如何動態地添加控件,這就是你正在嘗試做的事情。

+0

是否沒有'魔術'的方式來添加控件並忘記它,而不使用任何aspx標記?我不喜歡使用ViewState的想法,因爲它可以打開和關閉。 – GenericTypeTea

+0

不在ASP.NET中它不像Windows,它不保持它的狀態。 –

+0

我知道。我希望有一個我不知道的更好的方法。我將使用我的答案,因爲它不能像ViewState一樣被禁用。 – GenericTypeTea

相關問題