deviceFilters與設備過濾

来源:http://www.cnblogs.com/HopeGi/archive/2016/09/18/5880294.html
-Advertisement-
Play Games

本主題是ASP.NET在移動設備上展示的方面的內容 起初看起來deviceFilters與前面的browserCaps類似。同樣也會關聯到HttpBrowserCapabilities,而在這裡用到的是MobileCapabilities,但是細看後發現browserCaps關註的是瀏覽器,devi ...


本主題是ASP.NET在移動設備上展示的方面的內容

   

起初看起來deviceFilters與前面的browserCaps類似。同樣也會關聯到HttpBrowserCapabilities,而在這裡用到的是MobileCapabilities,但是細看後發現browserCaps關註的是瀏覽器,deviceFilters關註的是設備本身。

定義了設備篩選器之後,您可以將其應用於 ASP.NET 移動控制項中以定義特定於設備的呈現。 應用的設備篩選器映射到 .aspx 文件中 DeviceSpecific構造內的 <choice> 元素。 然後,您可以為這些應用的設備篩選器設置屬性重寫和模板化。 一些特定於設備的自定義示例包括:

  • 重寫控制項的屬性,例如根據顯示功能為 Image 控制項選擇不同的圖像。
  • 對不同的移動設備使用不同的呈現樣式。
  • 在設備(例如 Pocket PC)上使用模板實現更豐富的呈現。

    這些方案中的每一個都需要根據目標設備是否與 Web.config 文件中的 <deviceFilters> 節匹配來進行篩選。 這些篩選器也可能遍佈在應用程式中,而不是只出現在一個地方。

    實際上服務端從一個HTTP請求得知這些信息,請求頭肯定有附帶。在面前的內容知道,瀏覽器的信息通過對User-Agent的識別,再通過瀏覽器功能定義,把結果存放在HttpBrowserCapabilities中,而這裡對設備功能判定的就是基於這裡得出的HttpBrowserCapabilities來進行。

    ASP.NET內置的設備功能可查看附表1

    可以從兩種設備篩選器中進行選擇:比較計算器或計算委托。

    對於簡單的比較,可以通過提供功能的名稱和要與之比較的值,指定基於比較的篩選器。 在運行時,如果功能值和提供的值相等,則設備篩選器的計算結果為 true。 布爾值屬性在比較時不區分大小寫;因此,true 和 True 都有效。 其他屬性比較區分大小寫。

    對於更複雜的計算,您可以通過提供方法的類和方法名指定基於計算委托的篩選器。 在運行時,調用所提供的方法來確定設備篩選器的計算結果是否為 true。

    在Web.config文件中配置如下

    <deviceFilters>
    <filter name="IsHtml" 
    compare="PreferredRendering" 
    argument="html32" />
    <filter name="GPSEnabled" 
    type="MyApplication.MyCapabilityEvaluators,MyApplication" 
    method="IsGPSEnabled" />
    </deviceFilters>

     對於第一個filter是用比較計算器的,compare特性是指定由比較計算器計算的瀏覽器功能。 該功能可以是任何內置功能,也可以是任何其他自定義功能計算器的名稱。argument特性是指定該功能應與之比較的參數;

    對於第二個filter是用計算委托,type是指定提供計算委托的類類型。是類的完全限定名:(類的全名+","+程式集名稱),method特性是指定提供計算委托的方法。

    下麵的示例演示如何定義名為 isHTML32 的設備篩選器。

    <filter name="isHTML32" compare="PreferredRenderingType" argument="html32" />

     在運行時,此篩選器將當前請求的 MobileCapabilities 實例的 PreferredRenderingType 屬性值與值 html32 進行比較。

    下麵的示例演示如何定義名為 GPSEnabled 的新功能。

    namespace MyAssembly
    {
    publicclass MyCapabilityEvaluators
    {
    publicstaticbool IsGPSEnabled(
    System.Web.Mobile.MobileCapabilities capabilities,
    String unusedArg)
    {
    // processing code
    }
    }
    }

    將以下元素添加到適當的 Web.config 文件以添加新功能:

    <filter name="GPSEnabled" 
    type="MyNamespace.MyCapabilityEvaluators, MyAssembly"
    method="IsGPSEnabled" />

    如果使用 Filter 屬性指定方法名稱,則該方法必須符合以下原型

    public bool methodName(
    System.Web.Mobile.MobileCapabilities capabilities,
    String optionalArgument);

    若需要獲取設備是否支持指定功能可以使用以下方式

    對於內置的功能除了可以用MobileCapabilities的屬性進行比較外,還可以這樣子

    ((System.Web.Mobile.MobileCapabilities)System.Web.HttpContext.Current.Request.Browser).HasCapability("ScreenBitDepth", "8");

    返回的是一個bool值,表明是否具備該功能;

    對於自定義的功能,只能通過HasCapability

    ((System.Web.Mobile.MobileCapabilities)System.Web.HttpContext.Current.Request.Browser).HasCapability("GPSEnabled", null);

     HasCapability 方法使用兩個參數:capabilityName,它是功能字典中設備計算方法、屬性或項的名稱;optionalArgument,它是 capabilityName參數需要的任何參數。 HasCapability 方法按照以下順序執行其計算:

  1. 它檢查 capabilityName 值是否是 Web.config 文件中指定的設備篩選器的名稱。

註意

HasCapability 方法通過將 optionalArgument 參數設置為 null 來計算 <DeviceSpecific> 和 <Choice> 構造。

  1. 如果第 1 步中的測試返回 true 並且篩選器是委托計算器(使用自定義方法計算指定數據的篩選器),則 HasCapability 方法將使用optionalArgument 參數中提供的參數調用委托並返回結果。
  2. 如果第 1 步中的測試返回 true 並且篩選器是比較計算器(將功能名與某個指定的值進行比較的篩選器),則 HasCapability 方法將使用該功能名和計算器中提供的參數(忽略所有原始 optionalArgument 參數)調用其本身並返回結果。
  3. 如果 MobileCapabilities 對象具有名為 capabilityName 的屬性,則 HasCapability 方法將此屬性強制轉換為字元串併在optionalArgument 值等於該字元串時返回 true。 布爾型比較不區分大小寫;其他比較區分大小寫。 因此,"true"等同於"True",但"left"不等於"Left"。
  4. 如果不存在任何 capabilityName 屬性,則 HasCapability 方法將在與 MobileCapabilities 對象關聯的功能字典中進行查找。 如果capabilityName 屬性存在,則 HasCapability 方法將其與 optionalArgument 參數進行比較並返回結果。 因為字典可以維護字元串,所以無需進行強制轉換。
  5. 如果這些測試失敗,HasCapability 方法將引發 ArgumentOutOfRangeException 異常。

   

   

   

附表1

下表從適配器開發人員的角度列出了 ASP.NET 移動控制項設備屬性及有效的標記語言。 此表還列出對於應用程式邏輯中的常規使用有效、從而適用於所有標記語言的屬性(通常不是呈現標記的屬性)。

Property

常規使用

HTML 和 XHTML

cHTML

WML

Browser

CanCombineFormsInDeck

CanInitiateVoiceCall

CanRenderEmptySelects

CanRenderInputAndSelectElementsTogether

CanRenderMixedSelects

CanRenderOneventAndPrevElementsTogether

CanRenderPostBackCards

CanRenderSetvarZeroWithMultiSelectionList

CanSendMail

DefaultSubmitButtonLimit

GatewayMajorVersion

GatewayMinorVersion

GatewayVersion

HasBackButton

HidesRightAlignedMultiselectScrollbars

InputType

IsColor

IsMobileDevice

Item

MaximumRenderedPageSize

MaximumSoftkeyLabelLength

MobileDeviceManufacturer

MobileDeviceModel

NumberOfSoftkeys

PreferredImageMime

PreferredRenderingMime

PreferredRenderingType

RendersBreakBeforeWmlSelectAndInput

RendersBreaksAfterHtmlLists

RendersBreaksAfterWmlAnchor

RendersBreaksAfterWmlInput

RendersWmlDoAcceptsInline

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Ubuntu16.04 LTS下apt安裝WireShark 安裝與配置 1. 首先通過apt安裝WireShark: 會同時安裝許多的依賴包,其中包括一個叫做wireshark common的包,在dpkg預配置時會彈出對話解釋安裝選項,大意是 可以被安裝成允許在wireshark用戶組中的用戶抓 ...
  • 模式:pattern 正則: grep:基本正則 Extended grep:擴展正則 基本正則: . :任意單個字元 []:指定範圍內 [^]:指定範圍外 次數匹配 *:字元出現任意次 ?:字元出現0次或1次 \{m,n\}:字元至少出現m次,至多出現n次 \{1,\}:字元至少出現1次 .*:匹 ...
  • 引言 基於生成圖片實現了一個手機號轉圖片的需求。 內容也很簡單,直接用手機號生成一個png圖片。就是為了背景透明以便其他地方調用。 有無鋸齒主要依靠一句代碼:g.TextRenderingHint= TextRenderingHint.AntiAlias; 生成圖片 1、有鋸齒 2、無鋸齒 生成方法 ...
  • 操作步驟: 給頁面隱藏TextBox賦值,然後觸發ASP.NET change事件,調用ASP.NET後臺方法,調用後執行客戶端腳本this.RegisterClientScriptBlock(DateTime.Now.ToString(), script); 執行頁面的script;頁面的scri ...
  • System.Data.OleDb.OleDbException: 未指定的錯誤的解決方法 ...
  • 很多時候我們在使用Lambda表達式查詢時,比如使用Lambda表達式查詢用戶數據,有時候會用電話或郵箱去查詢用戶信息,有時候又會用戶名去查詢用戶信息 其實查詢的結果都一樣,但唯一的區別就是Lambda表達式中的條件不一樣,那麼能不能只寫一個查詢方法,而實現Lambda表達式中Where的有查詢條件 ...
  • 只是想簡單說下表達式樹 - Expression Trees 目錄 簡介 Lambda 表達式創建表達式樹 API 創建表達式樹 解析表達式樹 表達式樹的永久性 編譯表達式樹 執行表達式樹 修改表達式樹 調試 簡介 表達式樹以樹形數據結構表示代碼,其中每一個節點都是一種表達式,比如方法調用和 x < ...
  • ps:曾經靠著這張圖做了很多的圖形報表 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...