此配置節的做用在於指定各類控件在不一樣類型的移動設備顯示的適配器,以達到適應各類設備不一樣的展現形式。例子以下, html
<mobileControls sessionStateHistorySize="6" cookielessDataDictionaryType="System.Web.Mobile.CookielessData"> <device name="XhtmlDeviceAdapters" predicateClass="System.Web.UI.MobileControls.Adapters.XhtmlAdapters.XhtmlPageAdapter" predicateMethod="DeviceQualifies" pageAdapter="System.Web.UI.MobileControls.Adapters.XhtmlAdapters.XhtmlPageAdapter"> <control name="System.Web.UI.MobileControls.Panel" adapter="System.Web.UI.MobileControls.Adapters.XhtmlAdapters.XhtmlPanelAdapter" /> <!--其餘控件--> </device> <device name="HtmlDeviceAdapters" predicateClass="System.Web.UI.MobileControls.Adapters.HtmlPageAdapter" predicateMethod="DeviceQualifies" pageAdapter="System.Web.UI.MobileControls.Adapters.HtmlPageAdapter"> <control name="System.Web.UI.MobileControls.Panel" adapter="System.Web.UI.MobileControls.Adapters.HtmlPanelAdapter" /> <control name="System.Web.UI.MobileControls.Form" adapter="System.Web.UI.MobileControls.Adapters.HtmlFormAdapter" /> <control name="System.Web.UI.MobileControls.TextBox" adapter="System.Web.UI.MobileControls.Adapters.HtmlTextBoxAdapter" /> <!--其餘控件--> </device> <device name="UpWmlDeviceAdapters" inheritsFrom="WmlDeviceAdapters" predicateClass="System.Web.UI.MobileControls.Adapters.UpWmlPageAdapter" predicateMethod="DeviceQualifies" pageAdapter="System.Web.UI.MobileControls.Adapters.UpWmlPageAdapter"> </device> <device name="WmlDeviceAdapters" predicateClass="System.Web.UI.MobileControls.Adapters.WmlPageAdapter" predicateMethod="DeviceQualifies" pageAdapter="System.Web.UI.MobileControls.Adapters.WmlPageAdapter"> <control name="System.Web.UI.MobileControls.Panel" adapter="System.Web.UI.MobileControls.Adapters.WmlPanelAdapter" /> <control name="System.Web.UI.MobileControls.Form" adapter="System.Web.UI.MobileControls.Adapters.WmlFormAdapter" /> <!--其餘控件--> </device> <device name="ChtmlDeviceAdapters" inheritsFrom="HtmlDeviceAdapters" predicateClass="System.Web.UI.MobileControls.Adapters.ChtmlPageAdapter" predicateMethod="DeviceQualifies" pageAdapter="System.Web.UI.MobileControls.Adapters.ChtmlPageAdapter"> <control name="System.Web.UI.MobileControls.Form" adapter="System.Web.UI.MobileControls.Adapters.ChtmlFormAdapter" /> <control name="System.Web.UI.MobileControls.Calendar" adapter="System.Web.UI.MobileControls.Adapters.ChtmlCalendarAdapter" /> <!--其餘控件--> </device> </mobileControls>
實際上這也是本配置節的默認配置的精簡版。 web
各個節點和屬性含義以下 緩存
<mobileControls --指定移動控件是否能夠具備自定義特性。 allowCustomAttributes="true|false" --定義字典類的類型,該類維護無 Cookie 的 Forms 身份驗證的密鑰。 cookielessDataDictionaryType="System.Web.Mobile.CookielessData" --定義用於在服務器會話中保存應用程序視圖狀態的歷史記錄的大小。 sessionStateHistorySize="number"> <!—適配器集--> <device name="String" --指定該設備適配器集必須繼承的設備適配器集。 inheritsFrom="String" " --爲適配器集指定頁適配器的類類型。 pageAdapter="String" --指定提供計算器謂詞的類類型。 predicateClass="String" --指定提供計算器謂詞的方法。 predicateMethod="String> <control --控件的徹底限定名稱。 name="String" --設備適配器的徹底限定名稱。 adapter="String" /> </device> <device...>...</device> </mobileControls>
device節點中,經過predicateClass中指定的類裏面的predicateMethod指定的方法來斷定當前這個設備是否適用於本適配器。這裏感受就和deviefilter識別至關相似,下面則是ChtmlPageAdapter的謂詞方法 服務器
瞭解設備適配器選擇過程 cookie
下面的過程描述如何選擇頁的設備適配器集: session
對於每個控件,將調用頁來提供指定控件類型的設備適配器。 ASP.NET 使用如下步驟來選擇適當的控件適配器: less
查找的結果會緩存起來,所以只須要爲第一個相關控件執行一次指定的查找。 上述的行爲將保留下來。 post
在 ASP.NET 移動控件及其關聯的適配器的生命週期中發生兩種類型的交互:控件和設備適配器之間的交互以及頁和頁適配器之間的交互。 ui
控件和控件設備適配器 spa
在移動控件的生命週期中,在控件及其關聯的設備適配器之間發生如下交互:
頁和頁適配器
雖然 MobilePage 類從 .NET Framework Page 類(而不是 MobileControl 類)繼承,但 MobilePage 類與適配器相關的行爲很是相似於 MobileControl 類的行爲。
ASP.NET 中的移動頁適配器(例如 ChtmlPageAdapter、HtmlPageAdapter、WmlPageAdapter 或 XhtmlPageAdapter)實現 IPageAdapter 接口(該接口自己實現 IControlAdapter 接口)。 所以,頁適配器的大部分生命週期相似於控件適配器的生命週期。 移動頁及其設備適配器的交互特定於 Page 類,而且在它們的生命週期中經歷如下步驟:
大體看了一下上述的流程和網上的源碼,感受每一個移動控件的生命週期只是定立了一個基本的套路,並無具體實現控件在某個具體生命週期內該作的事情,好比拿Calendar控件的渲染Render來講
它直接調用了基類的Render方法,而這個Render調用了OnRender
這裏的Adapter只是一個接口,是從Page中獲取的Adapter,具體的Adapter是從web.config中配置再篩選可得,那就看看具體某個ControlAdapter的Render方法,這裏拿ChtmlCalendarAdapter爲例,內容過長只截取方法頭和部分代碼
看了就知道這確實是實際的渲染控件的代碼。雖然感受這種方式怪怪的,可能也是適配器的做用,可是它確確實實能達到同一個控件在不一樣設備上呈現不一樣樣式的。
參考
適配器映射
來自 <https://msdn.microsoft.com/zh-cn/library/w5b9y36y(v=vs.100).aspx>
適配器類型
來自 <https://msdn.microsoft.com/zh-cn/library/99tteheb(v=vs.100).aspx>
適配器與 ASP.NET 的交互
來自 <https://msdn.microsoft.com/zh-cn/library/w5thxd3s(v=vs.100).aspx>
移動文本編寫器呈現的最佳作法
來自 <https://msdn.microsoft.com/zh-cn/library/aa2w58cf(v=vs.100).aspx>
分頁支持
來自 <https://msdn.microsoft.com/zh-cn/library/hhfw2x5a(v=vs.100).aspx>
設備模板支持
來自 <https://msdn.microsoft.com/zh-cn/library/yt1b020d(v=vs.100).aspx>
實現模板呈現
來自 <https://msdn.microsoft.com/zh-cn/library/ah665120(v=vs.100).aspx>