2011-08-08 13 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

WebControlの代わりにTextBoxを継承してTextを上書きするオプションはありませんか?それはあなたの質問に対する直接的な答えではありませんが、根本的な問題を解決するかもしれません。 – Olaf

答えて

1

あなたの入力には名前がありません。名前がなければ、彼の価値は決して転記されません!

+0

確かにこれは十分ではありません – Omu

+1

そしてRequest [this.Name]をチェックしてテキストを更新する必要があります。そうしないと、常に空になります! IPostBackDataHandlerを実装する – Alex

+1

も役立ちます – Omu

関連する問題