ASP.NET コントロール デザイナの概要
更新 : 2007 年 11 月
ASP.NET では、Web サーバー コントロールのデザイナを作成するための拡張サポートが提供されます。デザイナを使用すると、デザイン時のユーザー インターフェイス (UI) をコントロールに作成でき、開発者は Visual Studio などのビジュアル デザイン ツールでコントロールのプロパティおよび内容を構成できます。.NET Framework で提供されるデザイン時のアーキテクチャおよび機能の背景情報については、「デザイン時サポートの拡張」を参照してください。
この概要では、ASP.NET コントロール デザイナの機能、基本的なデザイナ クラスとその機能、およびデザイナを利用する事例について説明します。
デザイナの機能
ASP.NET は、これまでどおり、以前のバージョンのコントロール デザイナ アーキテクチャをサポートしますが、それ以外に重要な改善が行われました。
領域ベース編集。領域とはコントロールのデザイン時のビュー内で編集可能な領域です。この機能により、デザイン時にコントロールのコンテンツを WYSIWYG 式に編集できます。
アクション リスト。アクション リストとは、デザイン時の UI にあるタスクのメニューで、コントロールのページ開発者が使用できます。たとえば、コントロールのデザイン時のビューに、使用可能なタスク (コントロールを自動的に形式設定するタスクなど) のメニューを用意できます。
データ ソース デザイナとデータ バインド デザイナ。データ ソース コントロール デザイナを使用すると、ページ開発者がデータ ソース コントロールを構成できます。データ バインド コントロール デザイナを使用すると、ページ開発者がデータ バインド コントロールを構成できます。データ ソース デザイナとデータ バインド デザイナ間の相互コミュニケーションを実装する機能が利用できます。データ ソース コントロール デザイナの例については、DataSourceDesigner のトピックを参照してください。データ バインド コントロール デザイナの例については、HierarchicalDataBoundControlDesigner のトピックを参照してください。
簡素化されたテンプレート編集。テンプレート コントロールをデザイン時に編集するための UI を作成するモデル (GridView など) は、大きく簡素化および変更され、コントロール開発者は領域を使用して独自にテンプレート編集を実行できるようになりました。カスタマイズ例については、「テンプレート サーバー コントロールの例」を参照してください。
簡素化されたオブジェクト モデル。デザイン時レンダリングを扱うオブジェクト モデルも簡素化され、開発者はデザイン時の HTML の作成という問題に集中できるようになりました。簡素化されたオブジェクト モデルには、いくつかの新しい基本クラス (ControlDesigner、ContainerControlDesigner、および CompositeControlDesigner) からアクセスできます。
ホスト サービスへのサブスクリプション。コントロール デザイナは、ホスト環境が提供するさまざまなサービスに対してサブスクライブし、利用できます。たとえば、コントロール デザイナは、データへのアクセス、構成へのアクセス、プログラムによるデザイン時のページへのコントロールの追加、デザイナのクリック イベントの処理、デザイン サーフェイスへの描画、およびデザイナ状態などのその他のサービスへのアクセスを実行する Visual Studio 2005 サービスを使用できます。
デザイナ クラス
コントロール デザイナを使用すると、ランタイム コントロールとホスト環境間の媒介として機能することにより、Web サーバー コントロールをデザイン時に表示できます。ホスト環境で、コントロールのユーザー用にデザイン時 UI を作成するのに役立つ次の機能が、デザイナに用意されています。
デザイン時レンダリングとコンテンツ。コントロール デザイナを使用すると、簡単なものから複雑なものまで複数の種類のレンダリングが実行できます。コントロール用に用意できるデザイン時 UI の例として、領域ベース編集とテンプレート編集があります。またコントロールの列編集や複数のランタイム ビューを提供できるため、デザイン時にコントロールを扱う開発者は、実行時のコントロールのレンダリング方法について、一連のオプションから選択できます。
その他のデザイン時クラス。デザイナ クラス以外に、型またはプロパティに関連付けられ、文字列から値などの型変換を実行する型コンバータ クラスがあります。また、プロパティの編集専用の UI として機能する UI 型エディタ クラスもあります。たとえば、プロパティ グリッドのカラー ピッカー ドロップダウン リストを使用すると、Web コントロールのカラー プロパティのカラーを選択できます。コントロールのプロパティを一括して編集するクラスとして、専用のコンポーネント エディタを作成することもできます。
関連付けられたコントロール データの永続性。コントロールの内部プロパティとコンテンツを永続化して、コントロールとその子コントロールの状態をデザイン時環境で維持できます。これは構成されたコントロールに対するマークアップの定義方法により制御されます。
Web サーバー コントロールにコントロール デザイナを作成する場合、次のようないくつかの基本クラスを使用できます。
-
Web サーバー コントロールをデザイン時に使用できるようにする基本クラス。
-
子コントロールのコントロール コレクションを編集できるようにする簡単なコンテインメント コントロールの基本クラス。このデザイナには無料の編集可能領域が 1 つ用意されており、ホスト (Visual Studio 2005 など) によりすべてのレンダリングが自動的に提供されます。
-
複合 Web サーバー コントロールをデザイン時にレンダリングできるようにする基本クラス。子コントロールのレンダリングに対しても、プログラムによるコントロールを行うことができます。
DataSourceDesigner、BaseDataBoundControlDesigner、および HierarchicalDataSourceDesigner
データ ソース コントロールおよびデータ バインド コントロールをデザイン時に使用できるようにする基本クラス。これらは相互に通信できるようにデザインされています。
デザイナを利用する事例
コントロール デザイナを利用することが多い事例として、カスタム コントロールの開発とビジュアル デザイン ツールの開発の 2 つがあります。
カスタム Web サーバー コントロールを開発する場合、関連デザイナを作成して、ページ開発者がデザイン時にコントロールをより詳細に構成できるようにします。この方法は、そのコントロールが複数のページ開発者により再利用される場合に特に有効です。たとえば、カスタム チャート コントロールを作成するとします。関連付けられたコントロール デザイナを提供すると、複数のイントラネット ページ開発者がそれぞれ、異なるのスタイルのページにコントロールを構成できます。
Visual Studio 2005 や Microsoft FrontPage に類似したビジュアル Web デザイン ツールを開発する場合、コントロール デザイナのホスト機能コンポーネントを利用できます。これにより、カスタム コントロールをデザイン時にレンダリングするために、開発中のツールのサービスを利用し、ツールを使ってコントロール デザイナと対話できます。
.NET Framework デザイナ アーキテクチャの詳細については、「デザイン時アーキテクチャ」を参照してください。カスタム Web サーバー コントロールに独自にデザイナを作成する方法の詳細については、「チュートリアル : Web サーバー コントロール用の基本的なコントロール デザイナの作成」を参照してください。デザイン時ユーザー インターフェイス (UI) を提供するためのサービスとアクション リストを使用するカスタム コントロール デザイナの作成に関する詳細については、「アクション リストとサービスを使用したサンプル コントロール デザイナ」を参照してください。
カスタム コントロール デザイナの保護
コントロールがデザイン ビューの場合、デザイナ コンポーネントはプロパティの変更を処理すると共に、デザイン ホスト (例 : Visual Studio) にマークアップを表示します。デザイン時には、コントロールのデザイナ コンポーネントはデザイン ホストと同じ信頼レベルで実行します。デザイナ コンポーネントでは、データベースへのアクセス、リモート サーバー上の Web サイトの呼び出し、開発者のコンピュータに対するファイルの作成と書き込み、電子メール メッセージの送信、他のアセンブリに含まれるコードの実行を行うことができます。
このセクションでは、コントロール デザイナ機能のセキュリティを強化するうえで役立つ推奨手順について説明します。
コーディングと構成の推奨手順に従ってアプリケーションのセキュリティを向上させることに加え、Microsoft Windows およびインターネット インフォメーション サービス (IIS) の最新のセキュリティ更新プログラムを使用して各自のアプリケーション サーバーを常に最新の状態にすることも重要です。また、コンピュータにインストールした市販のカスタム コントロール パッケージが最新のリリースであることを確認する必要があります。
安全なコードの記述とアプリケーションのセキュリティ保護に関する推奨事項の詳細については、Michael Howard と David LeBlanc 共著『Writing Secure Code』を参照してください。また、「Microsoft Patterns and Practices」の Web サイトおよび「ガイドラインと最適な使用方法」を参照してください。
カスタム コントロール ユーザーのセキュリティ問題
不明なソースからのカスタム コントロールは、コンピュータから Web に重要情報を公開したり、デザイン時に悪意あるコードを実行したりするデザイナを含む可能性があることに注意してください。コード アクセス構成を使用してコントロール デザイナのアクセスを制限することはできません。これは、コントロール デザイナは常に完全に信頼されたデザイン ホストで実行する必要があるためです。信頼レベルの詳細については、「ASP.NET 信頼レベルとポリシー ファイル」を参照してください。コード アクセス セキュリティの詳細については、「コード アクセス セキュリティの概要」を参照してください。
カスタム コントロール開発者のセキュリティ問題
クラスおよびメンバの構成属性を使用してアクセス許可をコントロールの機能に必要な最低レベルに制限する方法は、デザイナ コンポーネントに対する十分なセキュリティ対策とは言えません。これは、デザイナ コンポーネントを完全に信頼されたデザイン ホスト内で実行する必要があるためです。
データベースにあるライブ データを使用して、GridView コントロールなどのデータ コントロールをプレビューするためのサンプル構造を表示することはできるだけ避けてください。これは、データベース上の重要情報の公開につながる可能性があるためです。代わりに、サンプルのデータ構造を使用してプレビュー用のデータを作成します。
デザイン ホスト開発者のセキュリティ問題
デザイン ホスト (例 : Visual Studio) の開発者は、HTML マークアップ、テキスト、およびデザイナから返されたその他のデータのセキュリティ リスクをチェックしてからそれらを表示する必要があります。また、HTML マークアップ文字列およびデザイナ領域のサイズを管理しやすい大きさに制限します。HTML 整合性チェックの詳細については、「ASP.NET Web ページにおけるユーザー入力の検証」を参照してください。
複数の開発ツールのサポート
Microsoft Visual Web Developer は、このトピックで説明するすべての機能をサポートしますが、他の開発者用ツールではサポートされない場合もあります。サポートされない場合がある機能を、次に示します。
領域。コントロール開発者は SupportsRegions プロパティを調べ、コントロール デザイナの動作を適宜変更できます。
ホスト サービス。コントロール開発者は、GetService メソッドの戻り値を調べてから、そのサービスを使用できます。例については、「方法 : コントロール デザイナでサービスとアクション リストを使用する」を参照してください。
領域コレクション。いずれのバージョンの GetDesignTimeHtml メソッドも、オーバーライドする必要があります。これは、領域コレクションをサポートしない開発ツールがあるためです。
参照
概念
アクション リストとサービスを使用したサンプル コントロール デザイナ