2009-06-25 4 views
1

セットアップ:多くのTextBoxコントロールを持つWebフォーム。ASP.NET - Enabled = Falseの場合、ラベルのテキストボックスをスワップ

TextBoxコントロールのEnabledプロパティのいずれかをFalseに設定すると、実行時にそのTextBoxをラベルの「スワップ」したいと思います。とにかく読んだだけの場合は、編集のために設計されたコントロールに表示しないでください。

私はこれがかなりシンプルで再利用可能であるべきだと思っていますが、これを行うにはどうすればよいでしょうか?

答えて

3

わからないその最良の方法は、私は、

は、それが読み取り専用であるかどうかを確認、renderメソッドをオーバーライドし、カスタムサーバーコントロールがテキストボックスである

になるだろうラベルコントロールのようなスパンタグはそうします。その後、ベース(テキストボックス)を引き継ぐレンダリングをさせない場合

...

public class SpecialTextbox : TextBox 
{ 
    public override void RenderControl(HtmlTextWriter writer) 
    { 
     if (!this.ReadOnly) 
     { 
      base.RenderControl(writer); 
     } 
     else 
     { 
      writer.Write(string.Format("<span id=\"{0}\" class=\"{1}\">{2}</span>", 
          this.ClientID, 
          this.CssClass, 
          this.Text)); 
     } 
    } 
} 
+0

あなたにもしたい場合は、「ラベル」のための「スパン」を入れ替えることができ – BigBlondeViking

2

可能な解決策の1つは、TextBoxを拡張する新しいコントロールを作成することです。あなたの特殊化されたコントロールは、レンダリングコードの一部をオーバーライドし、ReadOnly = trueの場合に、コントロールがLabelに似たレンダリングを引き起こします。それはあなたのレンダリングだけにして読まれている場合

+0

... – BigBlondeViking

2

もう一つの方法は、コントロールアダプタを使用してに見えることであろう。基本的には、BigBlondeVikingがやりたいこととまったく同じことをすることができますが、コード内で通常のasp:textboxコントロールを使用することができます。それはあなたや他の開発者にとってずっと簡単です。

私は、彼らは道あなたが考える好き

About control adapters

関連する問題