web-dev-qa-db-ja.com

UserControl、WebControl、RenderedControl、CompositeControlの違いは何ですか?

違いは何ですか、公式用語は何ですか、ASP.NET 3.5で廃止された用語はありますか?

50

UserControl:.ascxで終わる、他のWebコントロールで構成されるカスタムコントロール。 aspx Webページの小さなバージョンのようなものです。 UI(ascx)と分離コードで構成されます。 DLLを参照して、他のプロジェクトで再利用することはできません。

WebControl:WebページまたはUserControlでホストされるコントロール。連携して動作する1つ以上のクラスで構成され、aspxページまたはUserControlでホストされます。 WebControlsにはUI「ページ」がないため、コンテンツを直接レンダリングする必要があります。 DLLを参照することにより、他のアプリケーションで再利用できます。

RenderedControl:存在しません。 WebControlと同義かもしれません。コントロールがaspxページにレンダリングされるのではなく、HttpResponseに直接書き込まれることを示す場合があります。

CompositeControl:UserControlsとWebControlsの間。他のコントロールで構成されているため、UserControlsのようなコードです。コントロールの合成用のグラフィカルUIはありません。CompositeControlsのUI編集のサポートは、コントロール設計者がコーディングする必要があります。合成は分離コードで行われます。 CompositeControlsは、WebControlsなどの他のプロジェクトで再利用できます。

48
Will

ServerControlを忘れました。

私の理解では、それはそのようなものです:

  • コントロールには、UserControlとServerControlの2種類しかありません。
  • CompositeControlsは、一種の「高度な」ユーザーコントロールです。 Scott Guthries Blog で詳細をご覧ください。
  • それらはすべてWebControlsです(すべてSystem.Web.UI.Controlから派生しているため)
  • それらはすべて何らかの方法でレンダリングされるため、すべてをレンダリングコントロールとして表示したいと思います。

MSDNから:

ユーザーコントロール

ASP.NETの場合:ASP.NETページと同じ構文を使用して宣言的に作成され、.ascx拡張子を持つテキストファイルとして保存されるサーバーコントロール。ユーザーコントロールを使用すると、ページの機能を分割して再利用できます。最初の要求で、ページフレームワークは、ユーザーコントロールをSystem.Web.UI.UserControlから派生したクラスに解析し、そのクラスをアセンブリにコンパイルして、以降の要求で再利用します。ユーザーコントロールは、ページスタイルのオーサリングと事前コンパイルなしの展開により、開発が容易です。

サーバー制御

ユーザーインターフェイスと関連機能をカプセル化するサーバー側コンポーネント。 ASP.NETサーバーコントロールは、System.Web.UI.Controlクラスから直接または間接的に派生します。 ASP.NETサーバーコントロールのスーパーセットには、Webサーバーコントロール、HTMLサーバーコントロール、およびASP.NETモバイルコントロールが含まれます。 ASP.NETサーバーコントロールのページ構文には、コントロールのタグにrunat = "server"属性が含まれています。関連項目:HTMLサーバーコントロール、検証サーバーコントロール、Webサーバーコントロール。

8
JRoppert

Webフォームと同様に、ユーザーコントロールはビジュアルデザイナーで作成することも、HTMLとは別のコードで作成することもできます。実行イベントもサポートできます。ただし、Webユーザーコントロールは実行時に動的にコンパイルされるため、ツールボックスに追加することはできず、ページに追加されると単純なプレースホルダーで表されます。

これにより、プロパティウィンドウやデザインビューのプレビューなど、Visual Studio .NETのデザイン時の完全なサポートに慣れている場合、Webユーザーコントロールの使用が難しくなります。また、アプリケーション間でユーザーコントロールを共有する唯一の方法は、各アプリケーションに個別のコピーを配置することです。これは、コントロールに変更を加えるとより多くのメンテナンスが必要になります。

Webカスタムコントロールはコンパイルされたコードであるため、使いやすくなりますが、作成が難しくなります。 Webカスタムコントロールは、コードで作成する必要があります。コントロールを作成したら、ツールボックスに追加し、プロパティウィンドウを完全にサポートし、ASP.NETサーバーコントロールの他のすべてのデザイン時機能を備えたビジュアルデザイナーに表示できます。さらに、Webカスタムコントロールの単一のコピーをグローバルアセンブリキャッシュにインストールし、アプリケーション間で共有することにより、メンテナンスが容易になります。

3
Govardhan

Willの応答に反して、他のプロジェクトでUserControlsを再利用することは、 Web展開プロジェクトを参照 によって可能です。

2
Guillaume CR

私はまだコメントするのに十分な評判がないので、これを答えとして追加しますが、それは上記のウィルの答えを参照しています。

link から以下を含めました:

複合コントロールは、複数の子コントロールが集約され、それらの間および外部と相互作用する複雑なコンポーネントを設計するための適切なツールです。レンダリングされたコントロールは、ドロップダウンやテキストボックスなどのインタラクティブな要素が出力に含まれないコントロールの読み取り専用集計に最適です。

ドキュメントは、RenderメソッドをRendered Controlsとしてオーバーライドすることによって作成されたUserControlsを参照していると思います。したがって、質問が示すように別個の型ではなく、UserControlを実装する方法です。パターン。

0
Don