次の方法で共有


アダプティブ コントロール動作のアーキテクチャの概要

更新 : 2007 年 11 月

ここでは、ASP.NET のアダプティブ コントロール動作アーキテクチャの概要について説明します。このアーキテクチャを使用すると、コントロールのレンダリングを拡張して、モバイル デバイスのブラウザなど、多くの異なる種類のブラウザに対応できます。

アダプティブ コントロール動作は、ターゲット デバイス向けにカスタマイズされたコントロール動作です。ASP.NET はアダプティブ アーキテクチャを提供しています。このアーキテクチャにより、コントロールの有効期間の主要段階を受け取って、カスタム動作で置き換えることができます。既定では、ASP.NET のページ フレームワークは、アダプタの単一のインスタンスを、各要求の各コントロールに割り当てます。ほとんどの場合、このような既定の割り当ては、大半の開発者のニーズを満たすのに十分な柔軟性を備えています。その他の特別な場合には、カスタム アダプタを派生させてコントロールに割り当てることにより、特定のデバイスまたはデバイス ファミリのコントロール動作の追加要件を満たすことができます。

アダプティブ コントロール動作の一般的な例として、ASP.NET Web ページがブラウザまたはマークアップに固有のレンダリング処理を行うアダプティブ レンダリングがあります。アダプティブ レンダリングは、特に、作成するアプリケーションで異なるマークアップ言語を使用するブラウザをサポートしている場合に役立ちます。ASP.NET の Web ページのアダプティブ レンダリングを制御する場合、アプリケーションの既定の XHTML レンダリングを指定する方法や、ControlAdapter カスタム オブジェクトを指定する方法など複数の方法があります。ControlAdapter カスタム オブジェクトを指定する方法は高度なタスクであり、ほとんどの場合、必要とされません。

アダプティブ レンダリングは、次の方法で制御できます。

  • 複数のマークアップをレンダリングするようにアプリケーションを構成します。

  • XhtmlTextWriter クラスまたは ChtmlTextWriter クラスを使用して、コントロール タグと属性をカスタマイズします。

  • 出力をレンダリングする TextWriter カスタム クラスを作成します。

  • 宣言デバイス マークアップまたはブラウザ フィルタ処理を使用して、デバイス フィルタ定義に基づくコントロール プロパティの設定方法を変更します。

  • コントロールの既定の有効期間メソッドを、アダプタの有効期間メソッドで置き換えることができるカスタム コントロール アダプタを用意します。

アダプティブ レンダリング以外に、ターゲット デバイスに基づいて適応または指定できるコントロール動作には次のようなものがあります。

  • ポストバック データの処理

  • ビューステートの管理

  • カスタム コントロールの適用の防止

ASP.NET のページとコントロールのレンダリング

既定のレンダリング

ASP.NET Web ページの既定のレンダリングでは、HtmlTextWriter クラスのインスタンスが作成され、HtmlTextWriter クラスのインスタンスに設定されたパラメータを使用して、RenderControl メソッドが再帰的に呼び出されます。ページ コントロール階層の各コントロールは、そのマークアップを HtmlTextWriter オブジェクトの最後に追加します。変更後の HtmlTextWriter のコンテンツは、対応するブラウザにレンダリングされるコンテンツになります。

HTML 3.2 のコンテンツをクライアントにレンダリングする場合、ASP.NET は自動的に Html32TextWriter クラスを使用します。使用する TextWriter オブジェクトの型を判断するために、ASP.NET ページ フレームワークは、Browser オブジェクトの TagWriter プロパティを照会します。

HTML 4.0 またはそれ以降をサポートするブラウザを使用する場合、ASP.NET のページとコントロールは、既定で XHTML 1.0 Transitional 標準に準拠するマークアップをレンダリングします。ASP.NET が XHTML に準拠したマークアップをレンダリングするかどうかを指定するには、アプリケーションの Web.config ファイルに xhtmlConformance 要素 (ASP.NET 設定スキーマ) を設定します。ASP.NET と XHTML の詳細については、「ASP.NET と XHTML」を参照してください。ページの有効期間の詳細については、「ASP.NET ページのライフ サイクルの概要」を参照してください。

TextWriter カスタム オブジェクトの使用

既定では、ASP.NET は要求側デバイスに適した TextWriter オブジェクトを使用します。TextWriter の制御を強化する必要がある場合は、HtmlTextWriter クラスから派生した既存のクラスを使用することも、カスタム テキスト ライタを作成することもできます。

XhtmlTextWriter クラスと ChtmlTextWriter クラスは、HtmlTextWriter クラスと Html32TextWriter クラスからそれぞれ派生した ASP.NET ページ フレームワークのクラスです。XhtmlTextWriter クラスと ChtmlTextWriter クラスには、追加のアダプティブ レンダリング機能が用意されています。この例を次に示します。

  • XhtmlTextWriter クラスは、XHTML マークアップをモバイル デバイスにレンダリングする場合に有用で、レンダリングされた XHTML 要素の属性をカスタマイズするためのメソッドを提供します。

  • ChtmlTextWriter クラスは、表示画面が小さく、書式指定機能が限定され、(携帯電話のタッチ パッドなど) 入力オプションの数が限られていることに加え、メモリおよび CPU 性能の限られたデバイスに、cHTML つまりコンパクト HTML をレンダリングする場合に便利です。

カスタム テキスト ライタを作成する場合、または特定のテキスト ライタを指定して、特定のデバイスの出力をレンダリングする場合、アプリケーションの .browser ファイルで、controlAdapters 要素の markupTextWriterType 属性を使用するデバイスにテキスト ライタを割り当てる必要があります。

デバイス フィルタ

デバイスのフィルタ処理を使用すると、Web サーバー コントロールのプロパティの出力レンダリング機能を宣言によりカスタマイズできます。フィルタ処理はコントロール プロパティ、カスタム属性、およびテンプレートに適用できます。また、@ Page ディレクティブと @ Control ディレクティブの一部の属性に、デバイス フィルタ処理を使用できます。1 つのプロパティまたは属性に複数のデバイス フィルタを指定した場合、最も限定的なフィルタが優先されます。

  1. 出力のフィルタ処理に使用されるデバイス フィルタ定義は、アプリケーションで指定されているブラウザの種類の定義に基づきます。既定のブラウザ定義ファイルは、%SystemRoot%\Microsoft.NET\Framework\versionNumber\CONFIG\Browsers ディレクトリ内にあります。アプリケーションの App_Browsers フォルダで指定されるブラウザ定義ファイルは、既定の定義ファイルとマージされます。

デバイス フィルタ処理の詳細については、「ASP.NET デバイスのフィルタ処理の概要」を参照してください。.browser ファイル形式の詳細については、「ブラウザ定義ファイルのスキーマ (browsers 要素)」を参照してください。

コントロール アダプタ

概要

ページまたはコントロールの動作をカスタマイズする場合、ASP.NET ではコントロールの有効期間の主要な時点で動作を適応または修正する ControlAdapter オブジェクトを指定できます。有効期間メソッドが呼び出される有効期間の各段階で、ASP.NET ページ フレームワークは、コントロールに関連付けられたアダプタが存在するかどうかを確認し、コントロールのメソッドの代わりにアダプタの関連メソッドを呼び出します。多くの場合、アダプタのメソッドは単にコントロールのメソッドに戻るだけです。この動作の例外は、コントロールの状態にアダプティブ動作が追加される、状態管理のアダプタです。

コントロールの動作をコントロール アダプタでオーバーライドする状況には、次のようなものがあります。

  • コントロールの有効期間の特定の段階で、ターゲット固有の処理を行う場合。

    たとえば、ControlAdapter クラスの OnInit メソッドを使用して、アダプタが割り当てられているコントロールに固有の初期化タスクと、コントロールのレンダリング先のデバイスに固有の初期化タスクを実行できます。

  • ターゲット固有のレンダリングをカスタマイズする場合。

    たとえば、Render メソッドと RenderChildren メソッドを使用してターゲット固有のマークアップを生成できます。

WebControlAdapter コントロールと PageAdapter コントロール

ControlAdapter クラスは、すべてのアダプタの基本機能を定義する抽象クラスです。WebControlAdapter クラスと PageAdapter クラスの基本クラスとして機能します。

WebControlAdapter クラスは、WebControl クラスから継承されたコントロールをアダプティブにレンダリングする場合の開始点になります。ControlAdapter クラスのメソッド以外に、WebControlAdapter クラスもタグのレンダリングに固有の複数のメソッドを追加します。

PageAdapter 抽象クラスは、Web ページをアダプティブにレンダリングする場合の開始点です。

また、PageAdapter クラスは、ページ レベルの通常のタスク (ページ状態の永続性のキャッシュまたは管理など) のコンテキストでアダプティブ レンダリングを有効にするプロパティおよびメソッドを定義します。たとえば、ターゲットに依存しないパラメータに基づくページのキャッシュに加えて、ターゲット ブラウザの種類に基づいてキャッシュすることが必要な場合もあります。この場合は、PageAdapter クラスの CacheVaryByParams プロパティをオーバーライドして、ターゲット固有のキャッシュを制御するための追加の GET パラメータまたは POST パラメータのリストを返します。

カスタム テキスト ライタと同様に、カスタム コントロール アダプタが ASP.NET ページ フレームワークにより認識されるには、アプリケーションの .browser ファイルの controlAdapters 要素にカスタム コントロール アダプタを定義する必要があります。.browser ファイル形式の詳細については、「ブラウザ定義ファイルのスキーマ (browsers 要素)」を参照してください。

アダプタを作成する場合、次のガイドラインを含むデザイン パターンに従います。

  • Control クラスから継承されるコントロールには、ControlAdapter クラスから継承されるアダプタが必要です。

  • WebControl クラスから継承されるコントロールには、WebControlAdapter クラスから継承されるアダプタが必要です。

  • カスタム コントロールを作成する開発者が、アダプタ機能を拡張する必要がある場合、コントロールの基本クラス アダプタを作成します。

参照

概念

ASP.NET ページのライフ サイクルの概要

ASP.NET と XHTML

ASP.NET デバイスのフィルタ処理の概要

参照

xhtmlConformance 要素 (ASP.NET 設定スキーマ)

ブラウザ定義ファイルのスキーマ (browsers 要素)

その他の技術情報

ASP.NET カスタム サーバー コントロールの開発