标签:ring weight ipo ora 分代 equal box 结构 efi
此配置节的作用在于指定各种控件在不同类型的移动设备显示的适配器,以达到适应各种设备不同的展示形式。例子如下,
<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>
实际上这也是本配置节的默认配置的精简版。
各个节点和属性含义如下
<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的谓词方法
了解设备适配器选择过程
下面的过程描述如何选择页的设备适配器集:
对于每一个控件,将调用页来提供指定控件类型的设备适配器。 ASP.NET 使用以下步骤来选择适当的控件适配器:
查找的结果会缓存起来,因此只需要为第一个相关控件执行一次指定的查找。 上述的行为将保留下来。
在 ASP.NET 移动控件及其关联的适配器的生命周期中发生两种类型的交互:控件和设备适配器之间的交互以及页和页适配器之间的交互。
控件和控件设备适配器
在移动控件的生命周期中,在控件及其关联的设备适配器之间发生以下交互:
页和页适配器
虽然 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>
标签:ring weight ipo ora 分代 equal box 结构 efi
原文地址:http://www.cnblogs.com/HopeGi/p/6021688.html