更新 : 2007 年 11 月
ここでは、ASP.NET モバイル コントロール用の比較型フィルタおよびエバリュエータ デリゲート型フィルタを作成する方法を説明します。デバイス フィルタには、名前付きの条件を作成するための機構が用意されています。このフィルタを使用すると、デバイスまたはモバイル デバイスのプロパティを指定できます。これらのフィルタは、Web.config ファイルの <deviceFilters> セクションに格納されています。
各デバイス フィルタは、1 つまたは複数のデバイスの種類に一致します。また、1 つのデバイスが複数のフィルタに一致することもあります。たとえば、Pocket PC はカラー表示のデバイスとしてフィルタ IsColor に一致し、PDA としてフィルタ IsPDA に一致する以外に、HTML ベースのブラウザとしてフィルタ IsHTML32 に一致することが考えられます。
それぞれのフィルタに対し、Web.config ファイルの <deviceFilters> セクションに <filter> 要素を追加します。
フィルタには、比較型フィルタおよびエバリュエータ デリゲート型フィルタを指定できます。
比較型フィルタ
比較型フィルタは、MobileCapabilities プロパティ値を引数と比較します。比較型フィルタの構文を以下に示します。
<filter
name="nameofFilter"
compare="propertyName"
argument="filterargument" />
比較型フィルタでは、<filter> 要素は次の 3 つのプロパティを持ちます。
name 属性。フィルタの名前です。
compare 属性。フィルタが評価するプロパティを格納します。
argument 属性。propertyName 値と比較される引数です。引数を指定しない場合は、null が比較に使用されます。
次の例では、PreferredRenderingType の値が wml11 の場合にフィルタに一致します。
<filter
name="isWML11"
compare="PreferredRenderingType"
argument="wml11" />
<Choice> 要素内でフィルタが使用され、フィルタとの一致が確認されると、ASP.NET は <Choice> 要素内のテンプレートに格納されているデバイス固有のコンテンツを選択します。
エバリュエータ デリゲート型フィルタ
エバリュエータ デリゲート型フィルタは、カスタム メソッドから true または false を返します。メソッドは、MobileCapabilities クラスのそれぞれのプロパティについて、戻り値を計算します。戻り値は、フィルタが一致するかどうかを調べるために使用されます。
エバリュエータ デリゲート型フィルタの構文を以下に示します。
<filter
name="nameOfFilter"
type="className"
method="methodName" />
エバリュエータ デリゲート型フィルタには次の 3 つのプロパティがあります。
name 属性。フィルタの名前です。
type 属性。エバリュエータ デリゲートを提供するクラス型です。名前は完全修飾する必要があります。ASP.NET では、その型の指定したアセンブリが検索されます。
method 属性。Type クラスのメソッドの名前です。このメソッドは、フィルタに渡した MobileCapabilities インスタンスに基づいて、現在のデバイスがフィルタ条件を満たすかどうかを示すブール値を返します。
次の例では、IsGPSEnabled メソッドが true を返す場合、フィルタに一致します。
<filter
name="GPSEnabled"
type="MyApplication.MyCapabilityEvaluators,MyAssembly"
method="IsGPSEnabled"/>
次の例は、IsGPSEnabled メソッドのスケルトン宣言です。
namespace MyApplication
{
public class MyCapabilityEvaluators
{
public static bool IsGPSEnabled(
System.Web.Mobile.MobileCapabilities capabilities,
String unusedArg)
{
// Any necessary proccessing goes here.
}
}
}
フィルタに対するサポートを追加するには、Web.config ファイルの <deviceFilters> セクションに行を追加します。たとえば、前述のフィルタをコンパイルして MyApplication.dll という名前のアセンブリを生成する場合、Web.config ファイルに次の行を追加します。
<filter name="IsGPSEnabled"
type="MyApplication.MyCapabilityEvaluators,MyApplication"
method="IsGPSEnabled" />