.NET TIPS [ASP.NET]DeclarativeCatalogPartコントロールでコンテンツ・カタログを定義するには?[2.0、3.0、3.5、C#、VB]山田 祥寛2008/02/28 |
|
|
「TIPS:[ASP.NET]WebPartsコントロールでページ内のコンテンツを編集/再配置するには?」で紹介したように、カタログ・パーツを利用すれば、ページ上から削除したWebパーツを再表示したり、ブラウザ上からインポートしたパーツ定義情報に基づいて新たなパーツをページに追加したりと、ページ上にパーツを再配置するための機能をコーディングレスで実装できる。本稿では、そのようなASP.NET 2.0が標準で提供するカタログ・パーツの1つであるDeclarativeCatalogPartコントロールの機能について紹介する。
DeclarativeCatalogPartコントロールを利用することで、WebPartZoneコントロールに配置可能なWebパーツのカタログを宣言できる。デフォルトでページに表示したくないWebパーツについては、このDeclarativeCatalogPartコントロールを利用することで、カタログとしてのみ登録しておき、あとから動的にページに追加することが可能となるわけだ。
次の画面は「RSSリーダ」というWebパーツを動的に追加している例である。
([RSSリーダ]「zone2」を選択して[追加]ボタンをクリック) |
DeclarativeCatalogPartコントロールで定義されたカタログを表示 |
追加したいWebパーツと追加先のゾーンを選択したうえで[追加]ボタンをクリックすると、ページにWebパーツが追加される。 |
それではさっそく、DeclarativeCatalogPartコントロールをページに組み込んでみよう。なお、ここで使用するサンプル・アプリケーションは「WebPartsコントロールでページ内のコンテンツを編集/再配置するには?」で作成したWebParts_cs.aspx/WebParts_vb.aspxをベースにしている。本稿ではそこからの差分のみを解説するので、WebPartsコントロールに関する基本的な知識については、こちらのTIPSを参照いただきたい。
DeclarativeCatalogPartコントロールでは、配下のカタログ定義を2つの方法で設定できる。
(1)WebPartsTemplateテンプレートで静的に定義
(2)ユーザー・コントロールとして定義されたカタログを動的に展開
●(1)WebPartsTemplateテンプレートで静的に定義
まずは、よりシンプルな静的なカタログ定義の手順を見ていくことにする。
1. ページにDeclarativeCatalogPartコントロールを配置する
最初に、カタログ定義のためのDeclarativeCatalogPartコントロールをページに追加する。先述のTIPSでも述べているが、DeclarativeCatalogPartコントロールは必ずCatalogZoneコントロールの配下に配置しなければならない点に要注意だ。
Webフォームのページレイアウト | |||
フォームに配置する各コントロールは以下のとおり。 | |||
|
2. カタログ定義を追加する
DeclarativeCatalogPartコントロールにカタログ定義を追加するには、タスク・メニューから[テンプレートの編集]を選択すればよい。
カタログ定義のためのWebPartsTemplateテンプレートを表示 |
タスク・メニューから[テンプレートの編集]を選択すると、WebPartTemplateテンプレートが表示される。WebPartsTemplateテンプレートの配下にカタログとして登録したいWebパーツ(サーバ・コントロールやユーザー・コントロールなど)を配置する。 |
Webパーツを配置するためのWebPartTemplateテンプレートが表示されるので、あとは、テンプレートの配下にカタログとして登録したいWebパーツ(サーバ・コントロールやユーザー・コントロールなど)を配置するだけだ。
ここでは、あらかじめ用意しておいたユーザー・コントロール「RssReader.ascx」「SimpleMessage.ascx」をそれぞれ配置しておこう。
WebPartsTemplateテンプレートにユーザー・コントロールを配置 | ||||||
フォームに配置する各ユーザー・コントロールは以下のとおり。 | ||||||
|
3. Webパーツの情報を定義する
2までの手順でもDeclarativeCatalogPartコントロールは動作するが、それぞれのパーツ名として「無題」と表示されてしまう。このままでは、それぞれのパーツを識別できないので、最低限、Webパーツのタイトルを設定しておこう。
ただし、Webパーツにかかわるプロパティは、フォーム・デザイナ(プロパティ・ウィンドウ)からは設定できないので、コード・エディタから直接にタグ記述を編集する必要がある*。
* Webパーツのプロパティ定義、および、設定可能なプロパティについては、「TIPS:[ASP.NET]ユーザー・コントロールでパーソナライズ可能なWebパーツを作成するには?」で詳説しているので、併せてご参照いただきたい。 |
|
|
Webパーツのプロパティ情報(タイトル)を定義 |
コード・エディタでは、エラーを表す緑色の波線が表示されるが、気にすることはない。実行時には正しく認識されるので、ここでは(やや気持ちは悪いものの)無視しておこう。
以上、ここまでの手順ができたら、ページを実行してみよう。ページをカタログ・モードに切り換えると、ページ下部に、冒頭の画面のような宣言済みカタログが表示されれば成功だ。ページに追加したいWebパーツと追加先のゾーンを選択したうえで、[追加]ボタンをクリックすると、ページにWebパーツ(ここではRSSリーダー)が追加されることが確認できるはずだ。
[参考] 「削除」と「閉じる」 | ||
DeclarativeCatalogPart/ImportCatalogPartコントロールなどで追加したWebパーツのメニューを確認してみよう。
上の画面のように[閉じる]と[削除]の項目が表示されるはずだ。両者は一見するとやや分かりにくいが、[閉じる]メニューは単にパーツを非表示に、[削除]メニューはパーツを完全にページから破棄するものである。つまり、[閉じる]メニューで非表示にされたパーツはPageCatalogPartコントロールから復帰することができるが(PropertyGridEditorPartコントロールで設定したプロパティ値も保持される)、[削除]メニューで削除されたパーツはプロパティ情報も含めて完全に破棄され、再度配置するにはDeclarativeCatalogPart/ImportCatalogPartコントロールから行う必要がある。 なお、[削除]メニューが有効になるのは、DeclarativeCatalogPart/ImportCatalogPartコントロールなどから動的に追加されたパーツに対してのみである。WebPartZpneコントロールに静的に配置されたパーツは[閉じる]ことしかできない。 |
●(2)ユーザー・コントロールとして定義されたカタログを動的に展開する方法
冒頭で述べたように、DeclarativeCatalogPartコントロールでは静的にカタログ定義するばかりではない。ユーザー・コントロールで定義されたカタログを動的に読み込み、展開することも可能だ。カタログ定義用のユーザー・コントロールを間に介することで、複数のページで同一のカタログ定義を利用したい場合にも、容易に再利用できるというメリットがある。
1. 新規にユーザー・コントロールを作成する
まずは、カタログ定義用のユーザー・コントロールWebPartsList.ascxを作成する。WebPartsList.ascxには、以下の画面の要領でカタログとして登録したいWebパーツ(サーバ・コントロールやユーザー・コントロールなど)を配置するだけだ。
WebPartsList.ascxのフォーム・レイアウト | ||||||
フォームに配置する各Webパーツは以下のとおり。 | ||||||
|
先ほどと同様、配置したWebパーツに対しては、最低限、コード・エディタからタイトルを設定しておこう。
|
|
Webパーツのプロパティ情報(タイトル)を定義 |
2. カタログを定義したユーザー・コントロールを読み込む
これでカタログの準備は完了だ。あとはDeclarativCatalogPartコントロールのWebPartsListUserControlPathプロパティに対して、カタログを定義したユーザー・コントロールのパス(ここでは「~/WebParts/WebPartsList.ascx」)を指定するだけだ。
また、先ほどWebPartTemplateテンプレートに定義した内容を削除しておこう。
以上でカタログを動的に展開する手順は完了だ。実際にページを実行し、カタログ・モードに切り替えると、(先ほど同様)ユーザー・コントロールで定義されたカタログがリスト表示される。
利用可能バージョン:.NET Framework 2.0 利用可能バージョン:.NET Framework 3.0 利用可能バージョン:.NET Framework 3.5 カテゴリ:Webフォーム 処理対象:WebPartsパーツ 使用ライブラリ:DeclarativeCatalogPartコントロール 関連TIPS:[ASP.NET]WebPartsコントロールでページ内のコンテンツを編集/再配置するには? 関連TIPS:[ASP.NET]ユーザー・コントロールでパーソナライズ可能なWebパーツを作成するには? |
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|