Web パーツ アプリケーションでの ASP.NET サーバー コントロールの使用
更新 : 2007 年 11 月
Web パーツ アプリケーションでは、プライマリ ユーザー インターフェイス (UI: User Interface) はゾーン内にある ASP.NET サーバー コントロールで構成されます。ゾーンとは、共通の UI を持ち、WebPartZoneBase クラスから派生する一種の複合コントロールによって作成される、Web ページ上の領域です。Web パーツ アプリケーションのプライマリ UI を形成するこれらのサーバー コントロールの機能は WebPart 基本クラスで定義されますが、このクラスから派生するコントロールしか使用できないわけではありません。標準の ASP.NET サーバー コントロール、ユーザー コントロール、またはカスタム サーバー コントロールも使用できます。このトピックでは、WebPart クラスから継承されないサーバー コントロールを Web パーツ アプリケーションで使用する際の問題について説明します。
ランタイム Web パーツ コントロールの作成
Web パーツ コントロール セットには、WebPart クラスから継承されないさまざまな種類のサーバー コントロール用に、それらを Web パーツ アプリケーションで使用できるようにし、WebPart クラスから派生するコントロールと同じ機能を持たせるための機構が用意されています。開発者はそのために特別な操作を行う必要はありません。必要なのは、WebPartZoneBase ゾーンにサーバー コントロールを追加することだけです。Web ページのコンパイル時に、ゾーン内にある WebPart クラスから継承されないサーバー コントロールがすべて GenericWebPart クラスのインスタンスで自動的にラップされ、そのインスタンスの子コントロールになります。GenericWebPart クラスは WebPart クラスから継承されるため、これによってサーバー コントロールで WebPart コントロールのすべての機能が有効になります。つまり、WebPart クラスから継承されないサーバー コントロールを WebPartZoneBase ゾーンに追加することにより、そのコントロールをランタイム WebPart コントロールにできます。
メモ : |
---|
Web パーツ アプリケーションでサーバー コントロールを使用できるのと同様に、WebPart コントロールを Web パーツ アプリケーションの外部で使用することもできます。WebPart クラスから継承されるコントロールをゾーンの外部のページに追加した場合、そのコントロールは通常のサーバー コントロールとして機能し、Web パーツ機能を失います。 |
ゾーンへの ASP.NET サーバー コントロールの追加
ASP.NET サーバー コントロール、ユーザー コントロール、またはカスタム コントロールを WebPartZoneBase ゾーンに追加するときは、ページで特別な技法や宣言を使用する必要はありません。通常 Web ページにコントロールを追加する場合と同様に、宣言 (ページ永続形式) またはプログラムで追加できます。また、サーバー コントロールをカタログに追加して、ユーザーが実行時にカタログからコントロールを選択してページに追加できるようにする、Web パーツ カタログ機能も使用できます。詳細については、DeclarativeCatalogPart コントロールおよび ImportCatalogPart コントロールを参照してください。
プログラムでサーバー コントロールをゾーンに追加する場合は、WebPartManager コントロールの AddWebPart メソッドを使用して追加する方法をお勧めします。
宣言で WebPart コントロール以外のサーバー コントロールをゾーンに追加する場合は、Microsoft Visual Studio 2005 などのビジュアル デザイン ツールを使用すると、プロパティ ペインまたは IntelliSense に WebPart のプロパティとメンバが表示されません。詳細については、WebPart コントロールとその他のサーバー コントロールの使い分けに関する以下のセクションを参照してください。
各種のサーバー コントロール オプションを使用するケース
Web パーツ アプリケーションで任意の種類のサーバー コントロールを使用できるのに、なぜ WebPart クラスから派生するコントロールを作成する場合があるのか疑問に思われる場合があるかもしれません。
考慮すべき重要な要素は、以前から存在するサーバー コントロールを採用する場合の利点と、WebPart クラスから派生した新しいコントロールを作成する場合の利点です。次のガイドラインを参考にして判断してください。
サーバー コントロールの使用
多くの場合、ASP.NET サーバー コントロール、ユーザー コントロール、またはカスタム コントロールを使用するのが (それらが既に存在する場合は特に) Web パーツ コントロールを作成するときに望ましい方法です。これらの種類のサーバー コントロールを使用した場合、ランタイム Web パーツ機能を失うことはなく、既存のコードを再利用でき、コントロール開発の知識を活用して Web パーツ アプリケーションに適用できるなど、多くの利点があります。
さらに、WebPart クラスが実装しているいくつかのインターフェイスを実装すると、さまざまなサーバー コントロールを WebPart コントロールと同じように動作させることができます。このようなコントロールを次に示します。
IWebActionable インターフェイス。このインターフェイスを実装すると、コントロールの動詞メニューにカスタム動詞 (最小化、閉じる、編集など、ユーザーが UI でコントロールに対して実行できる共通のアクション) を追加できるようになります。
IWebEditable インターフェイス。このインターフェイスを実装すると、カスタム EditorPart コントロールをサーバー コントロールに関連付けることができます。これにより、ユーザーが、コントロールの指定したカスタム プロパティと動作を実行時に編集できるようになります。
IWebPart インターフェイス。このインターフェイスを実装すると、Part クラスから継承される真の WebPart コントロールが持つプロパティの多くをコントロールに持たせることができ、デザイン時にも WebPart コントロールと同様の外観と操作性を持たせることができます。
WebPart からの派生
WebPart クラスから派生することでコントロールを作成する主な利点は、Web パーツ固有の動作を完全に制御できるということです。
その 1 つの例として、コントロールの開発者がコントロールの実行時の動作を変更した後でユーザーに再頒布する場合があります。開発者は、WebPart クラスのいずれかの仮想プロパティ (AllowClose など) をオーバーライドして、常に false を返す読み取り専用プロパティにできます。これによってコントロールを閉じられなくでき、コントロールのユーザーに対してそのように動作が制限されます。
WebPart クラスから継承する利点があるもう 1 つの例は、デザイン時の動作に関するものです。WebPart コントロールでは、公開されている WebPart メンバがすべてデザイン時に IntelliSense で表示されるため (Microsoft Visual Studio 2005 などのビジュアル デザイン ツールを使用している場合)、ページの開発者はプロパティをプロパティ ペインで宣言モードで操作できます。これに対して、デザイン時にゾーン内でサーバー コントロールを宣言し、それらが WebPart コントロールでない場合、WebPart クラスに固有のメンバを (宣言することはできますが) IntelliSense またはプロパティ ペインで表示することはできません。これは、通常のサーバー コントロールがデザイン時にはまだ GenericWebPart オブジェクトでラップされず、実行時に与えられる WebPart の機能を持たないためです。上記のインターフェイスを実装するとサーバー コントロールの外観と動作を WebPart コントロールと同じにできますが、多くの場合、WebPart コントロールを作成する方が簡単です。コントロールの開発者およびコントロールのパッケージを作成する販売元にとっては、WebPart クラスから継承することは、より充実したデザイン時の機能をコントロールに対して提供できるという利点があります。
まとめ
コントロールの標準プロパティをオーバーライドする必要がない場合、既存のサーバー コントロールを使用し、WebPart コントロールのパーツにする方が簡単なことがあります。
カスタム WebPart コントロールを作成する場合、オーバーライドできるプロパティを次に示します。
WebPart コントロールとしてのユーザー コントロール
ユーザー コントロールは、ASP.NET で開発する上で強力なオプションです。Web ページで使用される同じ宣言の構文を使用して、コントロールの複雑な UI を簡単に構築できます。また、複数のページにわたるコードを区切り、再利用する便利な方法も用意されています。ユーザー コントロールは、ASP.NET サーバー コントロールとしても、Web パーツ アプリケーションで使用できる強力なオプションです。ユーザー コントロールは WebPartZoneBase ゾーンに直接追加でき、上記のランタイム WebPart コントロールとして機能します。また、Web パーツ カタログ機能にユーザー コントロールを使用すると、インポート可能なコントロールとして使用したり、ユーザーが選択してページに追加できるその他のサーバー コントロールのセットをパッケージ化したりできます (詳細については、WebPartsListUserControlPath プロパティのトピックを参照してください)。
重要 : |
---|
ランタイム WebPart コントロールとして使用されているユーザー コントロールでは、ASP.NET 出力キャッシュが無効になります。Web パーツ コントロール セットでは、コントロールがページへの各要求のコントロール ツリー内に配置されている必要があります。これは、パーソナル化 (詳細については、「Web パーツのパーソナル化の概要」を参照) など、Web パーツの一部の機能を動作させるために必要です。ユーザー コントロールがキャッシュされる要求 (詳細については、@ OutputCache ディレクティブのトピックを参照) では、コントロールがコントロール ツリーに追加されません。このため、出力キャッシュは Web パーツの機能との互換性を持たず、Web パーツ アプリケーションで WebPart コントロールとして機能するユーザー コントロールでは機能しません。 |