デバイス固有のレンダリング
更新 : 2007 年 11 月
ASP.NET モバイル Web ページはさまざまなデバイスに自動的にレンダリングできますが、デバイスまたはデバイスのクラスに固有のコンテンツを指定する方法も用意されています。つまり、モバイル Web ページでは、ページをカスタマイズしてデバイスの特定の機能を利用できます。たとえば、別のデバイスではアイテムのレンダリングが異なるように設定することが共通の要件だとします。ASP.NET は、さまざまな種類のデバイスでのレンダリングに適した、多くの暗黙的な書式を処理します。ただし、必要な場合は、1 つのデバイスである文字列を使用し、別のデバイスでは異なる文字列を使用することにより、ASP.NET でラベルをレンダリングできます。
このような状況を管理するには、デバイス機能の問い合わせ結果に従って、コントロールのプロパティを設定するコードをアプリケーションに含めます。モバイル Web ページを特定の種類のデバイス用にカスタマイズするには、ページのデバイス フィルタのセットを定義し、<DeviceSpecific><Choice> 構成要素を使用して各種のデバイスに対してフィルタを指定します。
メモ : |
---|
既定の Visual Studio モバイル構成ファイルには、定義済みのさまざまなデバイス フィルタが含まれています。既定では、ASP.NET 2.0 はモバイル デバイス フィルタの自動的な生成は行いません。ただし、以前のバージョンの ASP.NET から ASP.NET Version 2.0 に移行すると、Web.config ファイルのデバイス フィルタは維持されます。 |
Filter プロパティの使用
デバイスの機能と照らし合わせてデバイス フィルタを評価したり、特定のフィルタを設定したりするには、Filter プロパティを使用します。
フィルタ名は、ページまたは .ascx ファイルにあるメソッドの名前、または Web.config ファイルの <deviceFilters> 要素に定義されている有効なデバイス フィルタの名前にする必要があります。Filter プロパティでメソッド名を指定する場合は、そのメソッドが次のプロトタイプに一致している必要があります。
public bool methodName(
System.Web.Mobile.MobileCapabilities capabilities,
String optionalArgument);
たとえば、Filter プロパティを myChoiceMethod に設定する場合は、次のシグネチャを持つメソッドが存在する必要があります。
public bool myChoiceMethod(
System.Web.Mobile.MobileCapabilities capabilities,
String optionalArgument
);
ASP.NET は、Choice 要素を評価するときに、適切なシグネチャを持つメソッドがページまたはユーザー コントロールに存在するかどうかをチェックします。存在しない場合は、Web.config ファイルの <deviceFilters> 要素をチェックします。
MobileCapabilities クラスを拡張するためのデバイス フィルタの使用
Web.config ファイルに独自のデバイス フィルタを追加することにより、MobileCapabilities クラスを拡張できます。デバイス フィルタを構成すると、比較型フィルタとエバリュエータ デリゲート型フィルタの 2 種類のフィルタで評価メカニズムを使用することができます。
比較型フィルタ
比較型フィルタでは、通常、ブール型の引数に基づいた基本的な比較が行われます。このタイプのフィルタには、機能の名前およびフィルタが比較する値を指定します。実行時には、機能の値と指定した値が等しい場合、エバリュエータは評価に成功します。比較されたブール型のプロパティでは大文字と小文字が区別されないため、"true" と "True" は同じです。その他の比較されたプロパティでは、大文字と小文字が区別されます。
エバリュエータ デリゲート型フィルタ
複雑な評価を行う場合、メソッドのクラス名とメソッド名を提供することでエバリュエータ デリゲート型フィルタを指定できます。実行時には、提供したメソッドはエバリュエータをテストするために呼び出されます。エバリュエータをテストするには、自分でメソッドを記述し、コンパイルする必要があります。または、前に説明したようにページまたはユーザー コントロール内でメソッドを定義し、メソッドを filter 属性から直接に参照することも可能です。
Web.config ファイルの構文
Web.config ファイルでデバイス フィルタを指定するときは、<system.web> セクションにデバイス フィルタを追加します。構文を調べるために、<deviceFilters> を参照してください。この構文では、両方の種類のフィルタが適用されています。次の例では、最初のフィルタは比較型のフィルタで、2 番目のフィルタはエバリュエータ デリゲート型のフィルタを示しています。
<system.web>
<deviceFilters>
<filter
name="capability"
compare="capabilityName"
argument="argument" />
<filter
name="capability"
type="className"
method="methodName" />
</deviceFilters>
</system.web>
MobileCapabilities オブジェクトは、これらのフィルタを実行時に評価します。各デバイス フィルタは、デバイスの機能に基づいて評価条件を指定します。デバイス フィルタがターゲットとするデバイスの複数のセットは、ほとんどの場合区別されません。たとえば、多くのデバイスが IsColor フィルタと IsPDA フィルタの両方に一致します。
メモ : |
---|
デバイス フィルタの名前では大文字と小文字が区別されます。 |
これらのフィルタの値は、<DeviceSpecific><Choice> 構成要素内で指定します。たとえば、以下のコードは Web.config ファイルで定義されている IsColor フィルタ属性にアクセスします。
<DeviceSpecific>
<Choice Filter="IsColor" ImageUrl="colorImg.gif" />
</DeviceSpecific>
デバイス固有の構成要素および Choice 構成要素の使用
<DeviceSpecific><Choice> 構成要素は、デバイス固有のマークアップをページに挿入するための中心的な構成要素です。デバイス固有のマークアップをコントロールに追加するには、そのコントロールの子として <DeviceSpecific> 要素を追加します。1 つのコントロールに 1 つの <DeviceSpecific> 要素しか含まれていない場合があります。
<DeviceSpecific> 要素および <Choice> 要素を使用すると、要求元デバイスの特性に基づいて ASP.NET が選択する値のセットを指定できます。選択される値は文字列です。
<DeviceSpecific> 要素は、以下の例に示すように、複数の選択肢を保持するための外側のコンテナです。
<mobile:Image runat=server ImageURL="bw.gif">
<DeviceSpecific>
<Choice Filter="isColor" ImageURL="colorImg.gif"
AlternateText="This device cannot display the image." />
<Choice Filter="isWML11" ImageURL="myImage.wbmp" />
<Choice ImageURL="monoImage.gif" />
</DeviceSpecific>
</mobile:Image>
isColor などのフィルタは、前に説明したように、Web.config ファイル内に対応するエントリを持っているか、ページまたはユーザー コントロール上のメソッドとして存在している必要があります。
Choice 要素の使用
Choice は <DeviceSpecific> 要素の内部に置かれ、いくつかの情報源からデバイスの特性が抽出される場合の、デバイスの特性と値の組み合わせを示しています。Choice は、DeviceSpecific/Choice 構成要素内に出現する順序で評価されます。
コントロールは、1 つの <DeviceSpecific> 要素しか含むことはできませんが、<Choice> 要素はいくつでも <DeviceSpecific> 要素に追加できます。各 <Choice> 要素には、次のものを格納できます。
評価するデバイス フィルタを指定するフィルタ名。フィルタ名を省略すると、その Choice は既定でオンになります。
親コントロールのプロパティをオーバーライドする追加のプロパティ。
コントロールのテンプレート定義。
ASP.NET は、各選択項目を順番に調べ、フィルタ名によって指定したフィルタを評価して、使用する <Choice> 要素を選択します。フィルタが (true と評価され) 現在の対象デバイスと一致すると、その項目が選択されます。このとき、コントロールは選択項目で指定されたプロパティのオーバーライドを適用し、レンダリングで定義されたテンプレートを使用できるようになります。