セットアップ: 多くの TextBox コントロールを含む Web フォーム。
TextBox コントロールの Enabled プロパティのいずれかを False に設定すると、実行時にその TextBox をラベルに「交換」したいと思います。とにかく読み取り専用の場合は、編集用に設計されたコントロールに表示しないでください。
これは非常にシンプルで再利用可能であるべきだと思いますが、これを行う最善の方法は何ですか?
最善の方法がわからない場合は、カスタム サーバー コントロールをテキスト ボックスにします。
次に、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));
}
}
}
考えられる解決策の 1 つは、TextBox を拡張する新しいコントロールを作成することです。次に、専用のコントロールがレンダリング コード (の一部) をオーバーライドし、ReadOnly = true の場合にコントロールが Label と同様にレンダリングされるようにします。
別の方法は、コントロール アダプターの使用を検討することです。基本的に、BigBlondeViking が推奨するのとまったく同じことを行うことができますが、コードで通常の asp:textbox コントロールを引き続き使用することもできます。これは、あなたや他の開発者にとってはるかに簡単です。