程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> ASP.NET 2.0移動開發之定義設備篩選器

ASP.NET 2.0移動開發之定義設備篩選器

編輯:.NET實例教程

     在一個ASP.Net移動頁面中使用DeviceSpecific/Choice構造時,你必須定義設備篩選器來測試 MobileCapabilitIEs對象的屬性。你可以在應用程序的Web.Config文件的<deviceFilters>節點中定義設備篩選器, 其中每個<filter>元素就是一個設備篩選器。下面是定義設備篩選器的語法:
  
  
  <system.web>
  <deviceFilters>
  <filter
  name="filterName"
  compare="capabilityName"
  argument="comparisonString"/>
  <filter
  name="filterName"
  type="className"
  method="methodName"/>
  </deviceFilters>
  </system.web>
  
     如上述代碼所示,存在兩個<filter>元素。它分別代表兩種不同類型的篩選器,分別為基於比較的篩選器和基於鑒別委托的篩選器。語法指定了這兩種篩 選器類型。第一種稱為基於比較的篩選器,可在運行時將開發人員指定的值與設備功能的當前值進行比較。當希望確定設備是否支持某特定功能時,可使用此類篩選 器。它的各個屬性為:
  
  屬性 說明
  name 必需的String屬性,指定設備篩選器的名稱。注意,在設置該屬性時要注意它是區分大小寫的。例如,isHTML和IsHtml代表不同的設備篩選器。
  compare 它包含設備篩選器計算的屬性。
  argument 指定該功能應與之比較的參數。如果未提供任何參數,則將 null 用於比較。
  
     下面來定義一個簡單的基於比較的篩選器,你完全可以在一個<deviceFilters>元素中定義基於比較的篩選器,而無需額外的代碼。例如,我們可 以添加一個用來測試某個移動設備是否支持Html 3.2的設備篩選器,你僅需在Web.Config配置文件中添加如下的代碼:
  
  <system.web>
  <deviceFilters>
  <filter name="isHTML32" compare="PreferredRenderingType" argument="Html32">
  </filter>
  </deviceFilters>
  </system.web>
  
     上面的代碼定義了一個名為isHTML32的篩選器,它用來測試MobileCapabilitIEs對象的 PreferredRenderingType屬性是否等於Html32。除了在DeviceSpecific/Choice構造中使用上面的篩選器外, 你還可以通過使用MobileCapabilitIEs對象的HasCapability方法來評估設備功能,此方法供ASP.Net內部使用,用來實現 用控件語法表達的各種設備選擇條件。如下面的代碼所示,它也是用來查看該移動設備是否支持Html3.2標記語言,如果設備具有指定的功能,則返回值為 true,否則為false。注意,如果是基於比較的篩選器,HasCapability方法的第二個參數為null。
  
  MobileCapablities cap = (MobileCapabilitIEs)Request.Browser;
  if ((cap.HasCapability ("isHtml32", null))
  {
  // Do something.
  }
  
    提 示:當你使用Visual Studio創建一個ASP.Net Web移動應用程序時,在添加的移動Web.Config配置文件中將包含大量的基於比較的篩選器。這些篩選器包括isWML11、isHTML32、 isCHtml10。你可以打開該配置文件,查看所有的可用設備篩選器。
  
  第二類設備篩選器稱為基於鑒別委托的篩選器。當需要比基於比較的篩選器更為復雜的設備篩選功能時,可以通過提供方法的類名稱和方法名稱,指定基於鑒別委托的篩選器。在運行時,調用提供的方法來確定設備篩選器的計算結果是否為true。該篩選器的屬性為:
  
  
  屬性 說明
  name 篩選器的名稱
  type 它是提供鑒別委托的類類型。名稱必須符合指定完全限定類型名的Microsoft .NET標准。ASP.Net在指定的程序集中搜索該類型。
  method 它是類type上方法的名稱,該方法根據傳遞給它的MobileCapabilitIEs實例返回一個布爾值指示當前的設備是否滿足此篩選器。
  
     現在我們來定義一個基於鑒別委托的篩選器,首先我們需要創建一個類庫項目,編寫和該篩選器相關的類及方法,經過編譯後,再在ASP.Net Web移動應用程序中引用包含該類的程序集,具體的實現將在後面用實例進行詳細的介紹。下面是類中的靜態方法的具體形式(第二個參數是可選的,你可以將該 參數作為額外的輸入信息添加到上面的靜態方法中):
  
  public static bool MethodName
  (System.Web.Mobile.MobileCapabilities capabilitIEs, String param)
  
     在Web.Config配置文件中,你可以采用<filter>元素的第二種形式定義基於鑒別委托的篩選器。例如,你創建了一個名為 isMMEonSony的篩選器,該篩選器使用了MyClass類中的一個名為MMEandSony的靜態方法,而且該類的命名空間是 MyEvaluators.dll程序集裡的MyNameSpace。因此我們需要在移動Web.Config配置文件中編寫如下的代碼:
  
  <system.web>
  <deviceFilters>
  <filter name="isMMEonSony"
  type="MyNameSpace.MyClass, MyEvaluators.dll"
  method="MMEandSony">
  </filter>
  </deviceFilters>
  </system.web>
  
    在上述配置中我們設置type屬性為該類的完整名稱:命名空間.類名,程序集。而method屬性的屬性值為運行時調用的實際的方法名。
  
    在DeviceSpecific/Choice構造中使用一個基於鑒別委托的篩選器和在DeviceSpecific/Choice構造中使用一個基於比較的篩選器沒有什麼太大的區別,下面是使用基於鑒別委托的篩選器的代碼片斷:
  
  <mobile:Form id="Form1" runat="server">
  <mobile:Label id="Label1" runat="server" Text="ClIEnt is NOT MME on Sony">
  <DeviceSpecific>
  <Choice Text="ClIEnt is MME on Sony" Filter="isMMEonSony">
  </Choice>
  </DeviceSpecific>
  </mobile:Label>
  </mobile:Form>
  
     除了上面的方法外,你還可以在代碼中使用MobileCapabilitIEs.HasCapability方法來查看移動設備是否具備 isMMEonSony基於鑒別委托的篩選器的功能,如果設備具有指定的功能,則返回值為true,否則為false。在基於鑒別委托的篩選器這種情形 下,HasCapability方法的第二個參數是可選的,你可以為該參數設置一個有意義的String值。
  
    使用第二個參數的好處就 是你可以傳遞一些MobileCapabilities對象無法獲取的移動設備信息到HasCapability方法中,例如我們知道HTTP文件頭會傳 送一些和移動設備相關的信息,我們可以使用System.Web.HttpRequest對象的屬性獲取移動設備的一些由 MobileCapabilitIEs對象無法獲取的其它信息。下面是具體的實現代碼:
  
  if (((MobileCapabilitIEs)Request.Browser).HasCapability(
  "isMMEonSony",
  Request.UserLanguages[0]))
  {
  // Do something.
  }
  
  
  [收藏到我的網摘] jazzking746發表於 2007年01月20日 22:31:00

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved