2011-08-08 72 views
1

我試圖重新創建TextBox控件, 問題是,回發後文本框中的值返回到它的初始狀態。重新創建文本框asp.net服務器控件

任何人都知道如何使它在回傳後堅持價值?

[DefaultProperty("Text")] 
    [ToolboxData("<{0}:MyTextBox runat=server></{0}:MyTextBox>")] 
    public class MyTextBox : WebControl 
    { 

     [Bindable(true)] 
     [DefaultValue("")] 
     public string Text 
     { 
      get 
      { 
       return (String)ViewState["Text"] ?? string.Empty; 
      } 

      set 
      { 
       ViewState["Text"] = value; 
      } 
     } 


     protected override void RenderContents(HtmlTextWriter output) 
     { 
      var a = string.Format(@"<input type='text' id='{0}' name='{0}' value='{1}' />", ID, Text); 

      output.Write(a); 
     } 

     protected override void Render(HtmlTextWriter writer) 
     { 
      RenderContents(writer); 
     } 
    } 
+0

您是否確定將控件添加到狀態包中足夠早(即在Page_Init中)? – Olaf

+0

@Olaf在標記中添加 – Omu

+2

不是從TextBox繼承而是從WebControl繼承(並覆蓋文本)的選項嗎?這不是對你的問題的直接回答,但可能解決潛在的問題。 – Olaf

回答

1

您的輸入沒有名字......沒有名字,他的價值永遠不會回來!

+0

確實,但顯然這是不夠的 – Omu

+1

而你應該檢查請求[this.Name]來更新你的文本,否則它將永遠是空的!實現IPostBackDataHandler的 – Alex

+1

也有幫助 – Omu