Asp.net でサーバー コントロールを作成する方法は、Windows フォーム コントロールと同じです。次のような方法があります。
1. ユーザーコントロール
2. Control および WebControl から派生したカスタム コントロール
3. 既存の Asp.net サーバー コントロールから拡張する
ユーザー コントロールは .ascx 拡張子を持ち、テキスト ファイルとして保存されます。ユーザー コントロールは、Control および WebControl から派生したサーバー コントロールのようにプリコンパイルする必要はありません。ユーザー コントロールが .aspx ページで使用される場合、ページ パーサーは から動的に開始されます。 aspx ファイルから生成され、アセンブリにコンパイルされます。その利点は、コードの再利用が解決され、各ユーザー コントロールが独自のオブジェクト モデルを持ち、その記述言語が .aspx ページの言語と関係がないことです。
既存の Asp.net サーバー コントロールを拡張し、主に .net ネイティブ サーバー コントロールの機能を強化して、開発およびエンド ユーザーのニーズに応えます。
Control および WebControl から派生したカスタム コントロールは、コンパイルされたクラス ライブラリの形式で展開されます。
このシリーズでは、上記 1 と 3 については説明しません。Control と WebControl から派生したサーバー コントロールについてのみ説明します。
カスタム コントロールを作成する場合は、Control と WebControl を継承するだけで済みます。Control は IComponent インターフェイスを実装しており、WebControl 自体は Control から派生しているため、コンポーネントのビジュアル デザインもサポートされています。
Render メソッドと HtmlTextWriter クラス。Control クラスから Asp.net サーバー コントロールを派生すると、Control クラスはオーバーロード可能な Render と HtmlTextWriter 型のインスタンスを提供します。Render メソッドは、提供されたサーバー コントロールのコンテンツを送信します。 HtmlTextWriter オブジェクトは、HTML テキスト ストリームを書き込む機能をカプセル化します。
システムを使用する; System.Collections.Generic を使用します。 System.Text を使用します。
名前空間 ClassLibrary1 { パブリック クラス Control1 : System.Web.UI.Control { protected オーバーライド void Render(System.Web.UI.HtmlTextWriter ライター) { Writer.Write("私はここにいます。"); } }
パブリック クラス Control2 : System.Web.UI.WebControls.WebControl { protected オーバーライド void Render(System.Web.UI.HtmlTextWriter ライター) { Writer.Write("私もここにいます。"); } } } |
上記のコードでは、Control1 と Control2 を定義しています。これらはそれぞれ Control と WebControl を継承しています。では、それらの本質的な違いは何でしょうか。まず次の効果を見てください。
上記の効果から、それらの違いを理解するのは難しくありません。WebControl クラスは、フォント、高さ、背景色などの属性を通じてスタイルをサポートします。では、どのような場合に Control から派生することを選択し、どのような場合に WebControl から派生することを選択するのでしょうか?コントロールが非ビジュアル要素を生成する場合、または非 HTML クライアントに表示する場合は、SqlDataSource などの Control から派生します。クライアントにビジュアル HTML を提供する場合は、TextBox などの WebControl から派生します。 。