1

セットアップ: 多くの TextBox コントロールを含む Web フォーム。

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

これは非常にシンプルで再利用可能であるべきだと思いますが、これを行う最善の方法は何ですか?

4

3 に答える 3

3

最善の方法がわからない場合は、カスタム サーバー コントロールをテキスト ボックスにします。

次に、render メソッドをオーバーライドし、読み取り専用かどうかを確認します。

読み取り専用の場合は、ラベル コントロールのようにスパン タグをレンダリングします。

そうでない場合は、base( textbox ) 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));
        }
    }
}
于 2009-06-25T21:25:10.247 に答える
2

考えられる解決策の 1 つは、TextBox を拡張する新しいコントロールを作成することです。次に、専用のコントロールがレンダリング コード (の一部) をオーバーライドし、ReadOnly = true の場合にコントロールが Label と同様にレンダリングされるようにします。

于 2009-06-25T21:24:36.050 に答える
2

別の方法は、コントロール アダプターの使用を検討することです。基本的に、BigBlondeViking が推奨するのとまったく同じことを行うことができますが、コードで通常の asp:textbox コントロールを引き続き使用することもできます。これは、あなたや他の開発者にとってはるかに簡単です。

コントロールアダプターについて

于 2009-06-25T21:45:01.453 に答える