若相依 发表于 2015-1-16 22:45:49

ASP.NET编程:ASP.NET 2.0挪动开辟之属性重写和模板化...

其实Java之所以在曾经独步天下,就是因为他的跨平台、安全性,这两方面,效率可不是Java的强项,反而是他最短的一块挡板,虽然net总是用理论证明比.NET快。asp.net|模板<P>  本文将重点解说怎样为特定的硬件设备自界说ASP.NETWeb挪动程序,和利用模板自界说Form和Panel等控件。经由过程属性重写这个特征,使ASP.NETWeb挪动程序能够依据挪动设备的硬件功效,为特定的硬件指定其控件的属性值。比方,使用程序大概必要一个Label控件在一些设备上显现较长的文本,而在另外一些设备上显现较冗长的文本。这就必要我们为每一个控件都供应一组属性,使用程序能够针对各个设备重写这些属性。一切的ASP.NET挪动控件都具有默许的表面和结构。关于ASP.NET挪动控件,你可经由过程设置属性或利用款式来改动挪动控件的默许表面。你还可使用模板自界说某些挪动控件的表面。本章还将重点先容模板和模板集,和它们的利用办法。

  自界说的体例

  在后面的几个专题中,我们提过怎样利用设备选择器为特定设备举行自界说。除此以外,我们还可使用模板化手艺和属性重写功效使你能够自界说你的使用程序,以便对特定的设备范例以分歧的体例出现控件。假如你在.aspx页面中为一个控件利用上述的任何一种自界说办法,都可使用一个名为DeviceSpecific/Choice机关的挪动控件语法。DeviceSpecific/Choice机关一般是为特定于设备的选项模板集和控件内涵多个备选内容之间指定一个选项。比方,上面的代码是一个Label控件的声明语法,在这个声明中包括了一个用来判别以后扫瞄器是不是撑持HTML的DeviceSpecific/Choice机关。

<mobile:Labelid="Label1"runat="server"Text="Defaulttext">
<DeviceSpecific>
<ChoiceFilter="isHTML32"Text="Textforselecteddevices"></Choice>
</DeviceSpecific>
</mobile:Label>
  个中Filter属性指定了一个设备选择器,该设备选择器其称号为isHTML32,它用来判别一个挪动设备是不是内置了HTML扫瞄器。假如内置了HTML扫瞄器的话,将会在Label控件上使用"Textforselecteddevice"这段文本。相反的,就不作任何的显现。正如上述的代码所示,在<DeviceSpecific></DeviceSpecific>内一般包括一个或多个<Choice>元素,每一个元素都包括指定怎样依据方针设备功效盘算选项的属性。运转时顺次盘算每一个选项,并利用乐成盘算出的第一个选项(这和C#里的switchcase语句十分类似)。

  在入手下手进修怎样界说一个设备选择器前,先让我们先懂得一些基础的观点,比方属性重写和模板化的详细寄义。

  属性重写

  一样平常情形下,我们开辟的ASP.NETWeb挪动程序并非针对某个详细的设备,而是能够依据挪动设备硬件特征的分歧,经由过程顺应性的调剂从而能够在几近一切的硬件设备长进行优秀的出现。

  可是由于品牌和型号的分歧,这些挪动设备间就不成制止地存在一些差别。比方撑持的色彩、屏幕巨细、输出功效和扫瞄器利用的标志言语等。后面提到过,ASP.NET控件是能够被几近一切的硬件设备撑持的,由于它们自己就具有顺应性调剂的功效,并且控件设置的属性值也会陪伴ASP.NET控件使用到详细的使用程序中,其实不会由于硬件设备的分歧使属性值分歧。可是,在某些情形下你大概舍弃默许的出现,接纳自界说的出现体例。一个典范的例子就是字符的显现,比方我们利用Label控件举行字符串的显现,在一些屏幕较小的设备上,每行显现的字符数也是较少的,因而我们能够为该控件的Text属性设置为"我们利用ASP.NET",而针对一些年夜屏幕的设备,我们能够将Label控件的Text属性设置为"我们利用ASP.NET构建一个功效完美的挪动使用程序",恰是由于属性重写功效,我们才可使用上述的办法来构建一个针对分歧挪动设备的硬件特征做出最好出现的ASP.NETWeb挪动使用程序。

  模板

  Form、Panel、List和ObjectList等挪动控件都是模板化的控件。开辟职员一般利用模板来改动或丰厚使用程序的表面或内容。比方,假如为Form控件指定并选择了页眉或页脚模板,则该模板中包括的标志将被增加到窗体内容中,分离作为页眉或页脚举行出现。请注重模板分歧于款式,模板界说要显现的内容和控件。当使用程序出现模板附加到的控件时,即会出现模板。而款式指定内容和控件的表面,您的使用程序可在不利用模板的情形下利用款式,它也可在模板内将款式使用于您界说的挪动控件。除模板外,ASP.NET挪动控件在此基本上还扩大了一个新的模子,并引进了模板集的观点。模板集是由模板构成的汇合。可是,单个模板化控件大概援用多个模板集,而每一个模板集都具有分歧的特定于设备的前提。模板集的详细完成将在后续章节详细先容。

  设备选择器详解

  利用设备选择器,使用程序可为特定硬件设备或设备种别自界说控件的表面。该自界说基于用来扫瞄使用程序的硬件设备的功效。比方,假定开辟职员正在开辟次要用于撑持位图(.bmp)图象的特定品牌手持式设备的使用程序。在此设备上,开辟职员决意同时用来自.bmp文件的文本和图标显现List控件中的一切项。经由过程利用设备选择器,使用程序可检测到它是不是正在方针手持式设备上被用户扫瞄。这会招致使用程序利用同时用文本和图标显现列表项的设备特定的模板。此手艺可为特定硬件设备自界说使用程序。进一步扩大此示例,假定您还但愿可在显现.gif图象的恣意范例设备上扫瞄该使用程序。您的使用程序可使用检测程序什么时候在此类设备上利用的设备选择器。在该情形下,该程序指定利用文本和列表项图标的.gif图象(而不是.bmp图象)显现列表项的模板。这就为一类设备自界说了使用程序。

  设备选择器可完成的一些其他义务包含:

  ■依据设备范例选择款式。

  ■在撑持利用更加丰厚的体现情势出现控件的设备上,我们能够只管使用该硬件设备的功能,利用一些加倍仔细的、详细的出现体例。

  ■在显现功效受限定的设备上,利用更加复杂的体现情势出现控件。

  在DeviceSpecific/Choice机关中的<Choice>元素依附于挪动设备的功效。当你利用某挪动设备哀求一个ASP.NET挪动页面时,起首就会将包括该挪动设备型号和内置扫瞄器等信息经由过程HTTP文件头传送到服务器端,这时候服务器就会依据HTTP文件头传送的这些信息构建一个System.Web.Mobile.MobileCapabilities工具,以此来呼应客户端哀求。而设备选择器就是使用MobileCapabilities工具的一些只读属性举行事情的。一个典范的例子就是设备选择器怎样判别那些撑持HTML3.2标志言语的扫瞄器,完成这类判别就是检测和客户哀求相干的MobileCapabilities工具的PreferredRenderingType属性值是不是为"html32",是的话就是撑持HTML3.2标志言语的扫瞄器。

  注重,MobileCapabilities工具的各个属性是和扫瞄页面的挪动设备戚戚相干的。比方,当利用PocketInternetExplorer扫瞄器哀求页面时,MobileCapabilities工具的Browser属性将被设置为"PocketIE",PreferredRenderingType属性值设置为"html32",而ScreenPixelsWidth和ScreenPixelsHeight属性取决于挪动设备的详细型号,由于PocketPC、Smartphone和WindowsCE.NET都可使用PocketInternetExplorer扫瞄器,可是这些设备屏幕的分辩率是分歧的。

  由于分歧挪动设备利用的扫瞄器是分歧的,因而响应的MobileCapabilities工具各个属性也存在差别。假如你要检察特定扫瞄器的MobileCapabilities工具,你能够在C:WINDOWSMicrosoft.NETFramework[版本号]CONFIGBrowsers目次下,检察openwave、PocketInternetExplorer、palm和nokia等浩瀚扫瞄器的信息。上面是openwave扫瞄器对应文件的一段代码片段,在利用该扫瞄器哀求页面时,这些信息就会经由过程HTTP文件头传送到服务器端,并构建具有相似属性值的MobileCapabilities工具。

<capabilities>
<capabilityname="browser"value="Phone.com"/>
<capabilityname="canInitiateVoiceCall"value="true"/>
<capabilityname="canSendMail"value="false"/>
<capabilityname="deviceID"value="${deviceID}"/>
<capabilityname="deviceVersion"value="${deviceVersion}"/>
<capabilityname="inputType"value="telephoneKeypad"/>
<capabilityname="isMobileDevice"value="true"/>
<capabilityname="majorVersion"value="${browserMajorVersion}"/>
<capabilityname="maximumRenderedPageSize"value="1492"/>
<capabilityname="minorVersion"value="${browserMinorVersion}"/>
<capabilityname="numberOfSoftkeys"value="2"/>
<capabilityname="optimumPageWeight"value="700"/>
<capabilityname="preferredImageMime"value="image/vnd.wap.wbmp"/>
<capabilityname="preferredRenderingMime"value="text/vnd.wap.wml"/>
<capabilityname="preferredRenderingType"value="wml11"/>
<capabilityname="requiresAdaptiveErrorReporting"value="true"/>
<capabilityname="rendersBreakBeforeWmlSelectAndInput"value="true"/>
<capabilityname="rendersWmlDoAcceptsInline"value="false"/>
<capabilityname="rendersWmlSelectsAsMenuCards"value="true"/>
<capabilityname="requiresFullyQualifiedRedirectUrl"value="true"/>
<capabilityname="requiresNoescapedPostUrl"value="true"/>
<capabilityname="requiresPostRedirectionHandling"value="true"/>
<capabilityname="supportsRedirectWithCookie"value="false"/>
<capabilityname="type"
value="Phone.com${browserMajorVersion}"/>
<capabilityname="version"
value="${browserMajorVersion}${browserMinorVersion}"/>
</capabilities>
  固然,你还能够经由过程代码的体例将哀求页面的扫瞄器信息经由过程MobileCapabilities工具显现页面上,代码以下:

<%@PageInherits="System.Web.UI.MobileControls.MobilePage"
Language="c#"%>
<scriptlanguage="c#"runat="server">
publicvoidPage_Load(Objectsender,EventArgse)
{
 System.Web.Mobile.MobileCapabilitiescurrentCapabilities;
 MobileCapabilitiescurrentCapabilities=(MobileCapabilities)Request.Browser;
 //创立一个MobileCapabilities工具来猎取扫瞄器的信息

 if(currentCapabilities.PreferredRenderingMIME=="text/html")
 {
  Label2.Text="你利用的是撑持HTML的挪动设备";
  //假如是撑持HTML的挪动设备的话,显现下面的文本信息
 }
 elseif(currentCapabilities.PreferredRenderingMIME=="text/vnd.wap.wml")
 {
  Label2.Text="你利用的是撑持WML的挪动设备";
  //假如是撑持WML的挪动设备的话,显现下面的文本信息
 }
 Label1.Text="屏幕的宽度(字符数):"+currentCapabilities.ScreenCharactersWidth;
 //显现以后挪动设备每行能够显现的字符数
}
</script>
 <Mobile:Formrunat="server"id=frmTemplate>
  <mobile:labelID="Label1"runat="server"/>
  <mobile:labelID="Label2"runat="server"/>
 </Mobile:Form>
  提醒:在某些情形下,某特定挪动设备的MobileCapabilities工具取得的属性值并非你希冀的值。比方,我们常常在开辟过程当中间接利用桌面的IE来测试程序,你大概会以为PreferredRenderingType属性值为"html40",而实践上这个值为"html32",这是由于ASP.NET挪动控件只撑持HTML3.2,以是发送到桌面IE的标志言语仍然是HTML3.2。
<P>  MobileCapabilities的属性

  MobileCapabilities类包括了大批的属性,我们可使用这些属性来猎取挪动设备及其扫瞄器的相干信息。关于该类的详细细节你能够检察MSDN,在这里我们只枚举出一些经常使用的属性:

属性申明Browser扫瞄器的范例。比方PocketIE、MicrosoftMobileExplorer、i-mode、Nokia、Openwave和Ericsson等。CanInitiateVoiceCall当该设备的扫瞄器能够启动语音呼唤时前往true值CanSendMail假如该设备的扫瞄器撑持邮件的发送,就前往true值HasBackButton假如该扫瞄器有一个公用的"上一步"按钮的话,则前往true值InputType前往扫瞄器撑持的输出范例,包含virtualKeyboard、telephoneKeypad和keyboard等值IsColor该设备是不是撑持色彩显现,是的话前往true值。MaximumSoftkeyLabelLength前往软键标签可显现的文本的最年夜字符数MobileDeviceManufacturer前往挪动设备打造商的称号,假如为未知的话前往的是unknownMobileDeviceModel猎取挪动设备的型号名(假如已知)NumberOfSoftkeys前往挪动设备上软键的数量。PreferredImageMime前往扫瞄器一般首选的图象内容范例的MIME范例。这些值包含image/gif、image/jpeg、image/vnd.wap.wbmp和image/bmpPreferredRenderingMime前往扫瞄器一般首选的内容范例的MIME范例。这些值包含text/html和text/vnd.wap.wmlPreferredRenderingType前往一个指出该扫瞄器利用的标志言语及版本信息的字符串,这些字符勾通常为html32、wml11、wml12大概chtml10ScreenBitDepth前往屏幕的显现深度(以每像素位数为单元)ScreenCharactersHeight前往显现的近似高度(以字符举动单元)ScreenCharactersWidth前往显现的近似宽度(以字符为单元)ScreenPixelsHeight前往显现的近似高度(以像素为单元)ScreenPixelsWidth前往显现的近似宽度(以像素为单元)SupportsIModeSymbols猎取一个值,该值唆使扫瞄器是不是撑持i-mode标记。SupportsJPhoneSymbols猎取一个值,该值唆使扫瞄器是不是撑持J-Phone特定的图片标记。
  我们可使用HttpRequest工具的Browser属性指向MobileCapabilities工具的实例,然后可使用此实例来读取哀求扫瞄器和设备的功效。上面是测试MobileCapabilities工具的某个属性的代码片段:

MobileCapabilitiescapabilities=(MobileCapabilities)Request.Browser;
if(capabilities.ScreenPixelsWidth>120)
{
 //为年夜屏幕的挪动设备增加的代码
}
else
{
 //为小屏幕的挪动设备增加的代码
}
  鄙人一节中,将先容怎样在ASP.NET挪动站点程序中界说一个设备选择器,和设备选择器的两种分歧范例的详细完成。来吧!老师们!我代表千千万万的asp.net/C#的初学者在这里呼唤着!

兰色精灵 发表于 2015-1-17 16:35:59

关于ASP.NET功能上,ASP.NET比微软以前的ASP(96年出现)有更强大的library,更好的稳定性。ASP.NET可以使用.NETFramework中所有组件(也就是说.NET能实现的,ASP.NET一样能实现)。

小妖女 发表于 2015-1-20 20:17:02

主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台脚本语言,它的语法和VisualBASIC类似,可以像SSI(ServerSideInclude)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但是它自身存在着许多缺陷,最重要的就是安全性问题。

再现理想 发表于 2015-1-29 20:34:09

主流网站开发语言之PHP:PHP的全名非常有趣,它是一个巢状的缩写名称——“PHP:HypertextPreprocessor”,打开缩写还是缩写。PHP是一种HTML内嵌式的语言(就像上面讲的ASP那样)。而PHP独特的语法混合了C,Java,Perl以及PHP式的新语法。它可以比CGI或者Perl更快速地执行动态网页。

飘灵儿 发表于 2015-2-6 04:20:32

Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。

乐观 发表于 2015-2-15 13:16:31

以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。

愤怒的大鸟 发表于 2015-3-4 11:32:49

碰到复杂点的问题都不知道能不能解决,现在有点实力的公司都选择自已在开源的基础上做开发。但没听说过有人在IIS上做改进的,windows、sqlserver集群方面的应用也很少见。

海妖 发表于 2015-3-11 19:13:52

Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。

柔情似水 发表于 2015-3-19 09:06:10

碰到复杂点的问题都不知道能不能解决,现在有点实力的公司都选择自已在开源的基础上做开发。但没听说过有人在IIS上做改进的,windows、sqlserver集群方面的应用也很少见。

精灵巫婆 发表于 2015-3-27 16:09:47

碰到复杂点的问题都不知道能不能解决,现在有点实力的公司都选择自已在开源的基础上做开发。但没听说过有人在IIS上做改进的,windows、sqlserver集群方面的应用也很少见。
页: [1]
查看完整版本: ASP.NET编程:ASP.NET 2.0挪动开辟之属性重写和模板化...