ASP.NET モバイル Web アプリケーション 
ウォークスルー : デバイスのサポートの追加 

ASP.NET には、新しいモバイル デバイスのサポートを追加できる機能拡張モデルがあります。このサポートは、2 とおりの方法で追加できます。

異なるデバイスでが同一のブラウザを共有していることが多いため、アプリケーションの Web.config ファイルまたはサーバーの Machine.config ファイルにデバイス情報を追加することによって、最小限の開発作業でデバイスのサポートを追加できます。既定の Machine.config 構成ファイルは、次の場所に保存されています。

systemroot\Microsoft.NET\Framework\<バージョン番号>\CONFIG

このファイルには、サポートされている各ブラウザに対応する <filter> 要素があります。たとえば、Pocket PC 対応の Microsoft Internet Explorer を検出するセクションは、"<!-- Pocket IE -->" で始まります。このセクション内には、match 属性を持つ <case> 要素があります。この match 属性は、デバイスから送信されるユーザー エージェントに設定されています。

デバイスと一致するセクションが Machine.config ファイルにない場合は、アダプタ ファイルを修正して、そのデバイスに適したデバイス固有のレンダリングを追加できます。デバイス アダプタは、ツールキットに付属する C# ソース (.cs) ファイルとして使用可能です。これらのデバイス アダプタ ファイルは、デバイスの新しいサポートを追加するために再コンパイルすることができます。

アダプタ ファイルは、特定のコントロールを実際にレンダリングする役割を担っています。各モバイル コントロールには、対応する HTML アダプタ、WML アダプタ、および cHTML アダプタがあります。

メモメモ

場合によっては、cHTML アダプタは HTML アダプタから継承しているため、コントロールと 1 対 1 で対応していないこともあります。詳細については、「デバイス アダプタ コード」を参照してください。

アダプタ ファイルを修正する前に、必ず構成ファイルに情報を追加してみてください。新しいアダプタ セットを作成するよりも、エントリを追加する方が簡単です。新しいアダプタ セットを作成する必要がある場合は、アダプタに新しいデバイスを認識させるため、Machine.config ファイルおよび Web.config ファイルにエントリを作成する必要があります。

以下のウォークスルーは、新しいアダプタの作成を開始するときに役立つようになっています。

WmlMobileTextBox アダプタを使用した作業

各モバイル コントロールは、必要な情報を提供してモバイル デバイスに正しいマークアップ言語をレンダリングするアダプタ ファイルにマップされています。たとえば、>TextBox コントロールは >WmlTextBoxAdapter クラスを使用して、WML デバイスに正しいマークアップ言語をレンダリングします。このアダプタ ファイルには、Render メソッドが含まれており、このメソッドを編集するとクライアントに送信されるマークアップの種類を変更できます。Render メソッドには通常、ヘルパー メソッドを含む >WmlMobileTextWriter アダプタへの呼び出しが含まれています。このウォークスルーでは、WmlMobileTextWriter ヘルパの >Writer.RenderTextBox メソッドが、クライアントに送信する <input> タグを作成するときに役立ちます。

また、以下のサンプルに示すように、このウォークスルーでは >GetAttribute メソッドを使用してカスタム属性 testAttribute を読み込む方法も説明されています。

<mobile:textbox id="TextBox1" testAttribute="First Name:" runat="server" />)

このテスト属性を設計時にコントロールに設定して、実行時に WML の <input> タグを生成できます。

<input  name="TextBox1" testAttribute="FirstName"/>

アダプタ ファイルを修正するには

  1. http://go.microsoft.com/fwlink/?LinkId=6350 からアダプタのソース ファイルをダウンロードします。

  2. WmlTextBoxAdapter.cs ファイルのコピーを開き、編集します。

  3. WmlTextBoxAdapter.cs ファイル内の Render メソッドを探し、次のコードを Writer.RenderTextBox メソッドの呼び出しの前に追加します。

    String myAttribute = ((IAttributeAccessor)Control).GetAttribute("testAttribute");
  4. Render メソッドで見つかった Writer.RenderTextBox 呼び出しの最後の引数として myAttribute を追加します。

    writer.RenderTextBox(
       Control.ClientID, 
       value,
       format, 
       Control.Title,
       Control.Password, 
       Control.Size, 
       Control.MaxLength, 
       Control.BreakAfter,
       myAttribute
    );

上の手順で WmlMobileTextWriter の RenderTextBox メソッドに渡される新しい引数を追加したため、その引数を受け取って使用できるように RenderTextBox 関数を修正する必要があります。以下の手順は、追加した引数に応じてこの関数を修正する方法と、if ステートメントを使用して新しいコントロール属性を送信する必要のあるデバイスを指定する方法を示しています。

デバイスを指定するため、>MobileCapabilities クラスの >MobileDeviceModel プロパティが使用されています。デバイスが要求を行うと、MobileDeviceModel の値が Machine.config ファイルに作成されます。適切なデバイスが要求を行った場合、>WmlMobileTextWriter クラスの >WriteAttribute メソッドが呼び出されて新しいマークアップが作成されます。

WmlMobileTextWriter.cs ファイルを修正するには

  1. WmlMobileTextWriter.cs ファイルを開きます。

  2. 次のサンプルに示すように、文字列引数 myAttribute を RenderTextBox メソッドに追加します。

    public virtual void RenderTextBox(
       String id, 
       String value,
       String format,
       String title,
       bool password, 
       int size, 
       int maxLength, 
       bool breakAfter,
       String myAttribute
    )
  3. RenderTextBox メソッド内のコード WriteLine(" />"); の前に以下のコードを追加します。

    string type = Device.MobileDeviceModel;   
    if(type == "Generic Simulator")
    {
       if(myAttribute!=null && myAttribute.Length > 0)
       {
          WriteAttribute("testAttribute", myAttribute);
       }
    }

場合によっては、ほかのアダプタが修正を行ったアダプタに依存していることがあります。たとえば、>UPWmlMobileTextWriter クラスは Openwave 社の UP.Browser 用に特別設計されており、WmlMobileTextWriter クラスから継承しています。このため、以下の手順に従って、継承されたクラスの RenderTextBox メソッドを修正する必要もあります。

UPWmlMobileTextWriter.cs ファイルを修正するには

  1. UPWmlMobileTextWriter.cs ファイルを開きます。

  2. 次のサンプルに示すように、myAttribute という文字列引数を RenderTextBox メソッドに追加します。

    public override void RenderTextBox(
       String id, 
       String value,
       String format, 
       String title,
       bool password, 
       int size, 
       int maxLength, 
       bool breakAfter,
       String myAttribute
    )
  3. RenderTextBox メソッド内で見つかった base.RenderTextBox への呼び出しを修正して、引数 myAttribute を渡します。

    base.RenderTextBox(id, value, format, title, password, size, maxLength, false, myAttribute);

アダプタ ファイルを修正したら、モバイル Web アプリケーションで使用可能な新しいアセンブリを作成します。

新しいアセンブリを作成するには

  1. [スタート] ボタンをクリックし、Microsoft Visual Studio 2005 のコマンド プロンプトを起動します。次に、[すべてのプログラム] をポイントし、[Microsoft Visual Studio 2005] をポイントします。次に、[Visual Studio ツール] をポイントし、[Visual Studio 2005 コマンド プロンプト] をクリックします

  2. [Visual Studio 2005 コマンド プロンプト] ウィンドウで、このウォークスルーの最初の手順で作成した新しいアダプタ ファイルの場所を指定して、次のコマンドを入力します。

    cd hdd:\new adapter folder location
  3. 以下のコマンドを入力して、新しいアダプタの DLL をコンパイルして作成します。

    Csc /target:library
    /out:System.Web.UI.MobileControls.ShippedAdapterSource.dll
    /r:System.Web.Mobile.dll
    /debug+
    /D:COMPILING_FOR_SHIPPED_SOURCE
    /nowarn:0679
    *.cs

新しいアダプタのアセンブリを作成したら、そのアセンブリは Web アプリケーション内で参照される必要があります。また、新しいアセンブリが使用されるようにするため、Web.config ファイルを更新して Machine.config ファイルの設定をオーバーライドする必要もあります。カスタム属性を使用する場合は、Web.config ファイルの >AllowCustomAttributes プロパティを設定する必要があります。

Web アプリケーションを構成するには

  1. Visual Studio で、ソリューション エクスプローラのプロジェクト名を右クリックし、[参照の追加] をクリックします

  2. [参照] ボタンをクリックし、新しいアダプタ アセンブリに移動し、[開く] をクリックします。[OK] をクリックします

  3. Web.config-shippedAdapaters ファイルのコードをプロジェクトの Web.config ファイルにコピーして、新しいアダプタ アセンブリのサポートを追加します。

    メモメモ

    <system.web> タグの開始タグおよび終了タグは、Visual Studio によって生成された Web.config ファイルに既に存在するため、省略します。

  4. 以下のサンプルに示すように、Web.config ファイルで既存の <mobileControls> タグの AllowCustomAttributes プロパティを true に設定し、カスタム属性のサポートを追加します。

    <mobileControls allowCustomAttributes="true">
    </mobileControls>
  5. Visual Studio プロジェクトを再コンパイルします。

参照

その他の技術情報

新しいデバイス アダプタおよびデバイス サポートの追加

タグ :


Page view tracker