ASP.NET网站制作之ASP.NET挪动开辟之解说SelectionList控...
中间码是基于一个虚拟机器。源代码是最高层的,理论上从源代码开始直接编译成本地码能提供最大优化的。而中间码只能是转译成本地码,效率上难免受到损耗。根据虚拟机器所设定的体系结构的特点,和本地机器的差异的多少。asp.net|select|控件 正如后面说起的那样,SelectionList控件合用于出现较短列表的数据项。只管它不具有对长列表的分页显现功效,可是它的出现情势是丰厚多样的。只需设备扫瞄器撑持,SelectionList控件能够以下拉列表、单项按钮、多选按钮和复选框等浩瀚情势存在。SelectionList控件的列表中只要一个可视的数据项,别的的数据项只能以埋没值的情势与可视的数据项举行联系关系。要在服务器控件语法中指定埋没值,能够在<Item>元素中利用Value属性,而且将Value属性指定某数据项便可。假如利用静态绑定的情势来构建列表的话,那末你可使用DataValueField属性指定命据源中的某个字段作为埋没值。
语法
SelectionList列表控件的语法以下面的清单所示:
<mobile:SelectionList
runat="server"
id="id"
Alignment="{NotSet|Left|Center|Right}"
BackColor="backgroundColor"
BreakAfter="{True|False}"
Font-Bold="{NotSet|False|True}"
Font-Italic="{NotSet|False|True}"
Font-Name="fontName"
Font-Size="{NotSet|Normal|Small|Large}"
ForeColor="foregroundColor"
StyleReference="StyleReference"
Wrapping="{NotSet|Wrap|NoWrap}"
DataMember="dataMember"
DataSource="dataSource"
DataTextField="DataTextField"
DataValueField="DataValueField"
SelectType="{DropDown|ListBox|Radio|MultiSelectListBox|CheckBox}"
Title="String"
OnItemDataBind="itemDataBindHandler"
OnSelectedIndexChanged="selectedIndexChangedHandler">
<!--可选,以静态的体例声明数据项-->
<ItemText="Text"Value="Value"Selected="{True|False}"/>
</mobile:SelectionList>
至于要显现的列表数据项我们能够从数据源中举行读取,这类情形下我们必要利用DataMember、DataSource、DataTextField和DataValueField等属性。固然你也能够利用<item>标签静态地界说要显现的数据项和埋没值。注重,在上述SelectionList列表控件的语法中,并没有包括SelectedIndex这个属性,这是由于我们不成以在服务器控件语法中利用它,只要经由过程代码才可使用SelectedIndex属性来猎取以后选项的索引值。假如在服务器控件语法中要使某数据项处于被选中的形态,你能够在与该数据项对应的<Item>标签中设置Selected属性为True。
属性和事务
下表形貌枚举了SelectionList列表控件中的一些经常使用的属性和事务,个中"范例"列形貌了对应属性的范例,如许你就能够在代码中对这些属性举行设置和读取,至于这些属性可用的值你能够参考"语法"大节中的申明。
属性/事务范例形貌DataMemberString只要当SelectionList列表控件与一个System.Data.DataTable或System.Data.DataSet工具绑准时才利用此属性。该属性指定用来指定DataSet中谁人DataTable是列表控件的真负数据源。DataSourceObject只要当SelectionList列表控件接纳数据绑定的体例界说数据项时才利用这个属性。DataSource属性用来指定一个DataSet工具,或是一个汇合工具作为列表控件的数据源。DataTextFieldString当SelectionList列表控件绑定到DataSet或汇合工具时,DataTextField属性用来指定命据源中的某个字段在列表中举行显现。DataValueFieldString当SelectionList列表控件绑定到DataSet或汇合工具时,DataValueField属性用来指定命据源中的某个字段,用来供应埋没值与列表显现的数据项举行联系关系。ItemsSystem.Web.UI.MobileControls.MobileListItemCollection我们可使用这个属性会见MobileListItemCollection工具,而这个工具又是存储全部列表中的一切数据项对应的System.Web.UI.MobileControls.MobileListItem工具。你能够在代码中对这个汇合中的各个MobileListItem工具举行操纵。RowsInteger当列表控件的SelectType属性值为ListBox或MultiSelectListBox时,Rows属性用来设置能够在HTML扫瞄器和CHTML扫瞄器中可出现出的数据项行数。因为WML扫瞄器不撑持多行显现,一切设置该属性是有效的。SelectedIndexInteger前往或设置以后谁人数据项被选中。假如SelectionList列表控件在以后为多选的形式时,也就是说假如你在一个列表当选择可多个数据项,那末SelectedIndex属性前往的是第一个被选中的数据项的索引。SelectionMobileListItem前往被选中的数据项(一个MobileListItem工具),假如在列表中没有选择任何数据项的话,将前往null。SelectTypeSystem.Web.UI.MobileControls.ListSelectType的列举值:DropDown|ListBox|Radio|MultiSelectListBox|CheckBox该列举用来反应SelectionList列表控件在设备扫瞄器上的显现款式。CheckBox和MultiSelectListBox同意多项选择,别的的列举值只同意单项选择。该属性的默许值为DropDown.ItemDataBind(event)事务处置函数当SelectionList列表控件以数据绑定的情势界说数据项时,在每一个数据项被增加到列表中时触发这个事务。SelectedIndexChanged(event)事务处置函数假如SelectionList控件处于单项形式时,当用户使选项体例改动时将挪用这个事务处置函数。该事务只要在一个Command控件发生一个从客户端到服务器真个回发时才触发,也就是说该事务是没法由SelectionList控件主动触发的,必需借助于Command控件。
SelectedIndex和Selection这两个属性只要当某个数据项被选择后才能够在代码中举行设置。你能够在代码中读取SelectedIndex的属性值,以断定以后选中的数据项在列表中对应的索引值。Selection也是相似的,只不外它前往的是与以后选中的数据项对应的MobileListItem工具,而不是索引值。
当用户在一个Selection列表中做出响应的选择后,客户端扫瞄器上的Form窗体将那些被选择的一个或多个数据项举行响应的编码,并将这些编码信息增加到要回发到服务器的数据中,如许ASP.NET运转时就能够使用这些被回发到服务器的数据来更新Selection的一些属性,比方SelectedIndex。可是Selection其实不会由于用户选择好了数据项后就主动地将数据信息回发到服务器上,而是要借助一个Command控件发生回发操纵,为此你必要将这个Selection列表控件和Command控件安排在统一个Form控件中。
<P> Selection列表控件的范例
Selection列表控件同意用户只能做出单项的选择,固然这必要你将Selection列表控件的SelectType属性设置为DropDown、ListBox或Radio。假如你将Selection列表控件的SelectType属性设置为MultiSelectListBox或CheckBox的话,用户将能够同时选择列表中的多个选项。在代码中,你可使用SelectionList类中的SelectType办法来设置或猎取列表控件所要利用的范例。假如Selection列表控件接纳的是多项选择形式的话,那末IsMultiSelect属性将前往一个true值。
注重,在WML1.2大概之前的WML版本中,是没法撑持单项框、下拉列表等图形用户界面元素的。在这些只上述的WML设备上,Selection列表控件是以一个WML<select>元素举行出现的,<select>元素也撑持单项和多项的体例。在WML扫瞄器上,你可使用软键(softkey)定位到一个数据项长进行选择,也能够利用一个数字键选择一个数据项,很明显,利用数字键的体例更便利也更直不雅。因而,假如你想接纳数字键来选择列表中的数据项的话,那末你必需确保该列表的项数应当小于或即是9个。下图是Selection列表控件的分歧范例在分歧扫瞄器上的显现效果:
构建一个静态列表
在静态列表中,数据项是利用Text属性指定一个字符串来举行出现的,而不是静态地读取自数据源中的某个字段内容。要指定一个静态列表的数据项,你必需利用<Item>属性,详细的示例代码以下:
<ItemText="Text"Value="Value"Selected="{True|False}"/>
Text属性用来指定在列表中显现的数据项信息,而Value就是相干联的埋没值。假如你但愿某数据项在默许情形下就处于被选中的形态的话,那末你能够将Selected属性设置为True。
注重,每一个Selection列表控件都与一个MobileListItemCollection工具联系关系。当你利用服务器控件语法静态地界说数据项,实践上是将与每一个数据项对应的MobileListItem工具增加到MobileListItemCollection工具中。你能够在代码中利用Items属性来会见MobileListItemCollection汇合。你还可使用MobileListItemCollection类中的Add、Clear和Remove等办法来增加、扫除或删除数据项。这些办法的详细用法你能够参考响应的MSND匡助文档,这里就不再具体先容了。
辨认Selection列表控件中被选中的数据项(单项形式)
在Selection列表控件的单选形式下,你可使用Selection.Name属性来猎取被选中数据项的显现文本,还可使用Selection.Value属性猎取被选中数据项的对应的埋没值。上面的两个程序清单就是一个显现被选中数据项对应埋没值的示例代码:
Default.aspx:
<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits="_Default"%>
<%@RegisterTagPrefix="mobile"Namespace="System.Web.UI.MobileControls"Assembly="System.Web.Mobile"%>
<htmlxmlns="http://www.w3.org/1999/xhtml">
<body>
<mobile:Formid="Form1"runat="server">
<mobile:LabelID="Label1"Runat="server">请选择想要购置的手器品牌</mobile:Label>
<mobile:SelectionList
id="SelectionList1"runat="server">
<ItemText="Dopoda"Value="P800"/>
<ItemText="Motorola"Value="A1200"/>
<ItemText="Nokia"Value="N70"/>
<ItemText="Samsung"Value="E638"/>
</mobile:SelectionList>
<mobile:Commandrunat="server"id="Command1"
>提交选择</mobile:Command>
</mobile:Form>
<mobile:FormID="Form2"Runat="server">
<mobile:Labelrunat="server"id="Label2">你选择的手机型号为:</mobile:Label>
<mobile:Labelrunat="server"id="Label3"/>
</mobile:Form>
</body>
</html>
程序代码申明:在这个程序中,我们在该页面上创立了两个窗体,Form1上安排了一个SelectionList列表控件,默许的范例为下拉列表,以是你只能够选择一项。固然,你还能够显式地设置SelectType属性为"DropDown"。在代码中能够看到,我们利用<Item>元素静态地界说各个数据项,个中用Text属性设置列表控件要显式的字符信息,而Value属性就是与显现的字符信息相干联的埋没值(本例中为手机的打造商和机型)。因为你选择一个数据项后,SelectionList列表控件没法主动将改动后的信息主动回发到服务器上,以是还在Form1上再安排了一个Command控件,用来发生一个回发。也就是说当用户选择好了列表中的某项后,在点击提交按钮就能够将响应的信息回发到服务器端举行处置了,我们在本例中设置了该Command控件OnClick事务的处置函数为HandleSingleSelection,该事务处置函数的详细内容你能够检察对应的代码后置文件。Form2的功效就是显现谁人数据项被用户选中,当你点击提交按钮后,Form2窗体将作为举动窗体,显现信息。
Default.aspx.cs
usingSystem;
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Web;
usingSystem.Web.Mobile;
usingSystem.Web.SessionState;
usingSystem.Web.UI;
usingSystem.Web.UI.MobileControls;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.HtmlControls;
publicpartialclass_Default:System.Web.UI.MobileControls.MobilePage
{
protectedvoidHandleSingleSelection(objectsender,EventArgse)
{
this.ActiveForm=Form2;
StringselectedMobile=SelectionList1.Selection.Value;
Label3.Text=SelectionList1.Selection+selectedMobile;
}
}
程序代码申明:HandleSingleSelection就是Command控件的OnClick事务的处置函数。一旦用户点击了该Command按钮,将使Form2成为举动窗体。并在Label3控件大将选中的数据项的字符信息和埋没值显现出来。
假如你不在挪动Web.Config文件中设置以下的代码,则在Openwave扫瞄器中会堕落:
<sessionStatemode="InProc"cookieless="true"timeout="20"></sessionState>
为此你最好将以下的挪动Web.Config设置代码替换VisualStudio主动天生的挪动Web.Config设置代码:
Web.Config
<?xmlversion="1.0"?>
<!--注重:除手动编纂此文件之外,您还可使用Web办理工具来
设置使用程序的设置。可使用VisualStudio中的"网站"->"ASP.NET设置"选项。
设置和正文的完全列表在machine.config.comments中,该文件一般位于WindowsMicrosoft.NETFrameworkv2.0.xxxxxConfig中
-->
<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<!--
设置compilationdebug="true"将调试标记拔出已编译的页面中。
但因为这会影响功能,因而只在开辟过程当中将此值设置为true。
-->
<compilationdebug="true"/>
<!--
经由过程<authentication>节能够设置ASP.NET利用的
平安身份考证形式,以标识传进的用户。
-->
<authenticationmode="Windows"/>
<!--
假如在实行哀求的过程当中呈现未处置的毛病,则经由过程<customErrors>节
能够设置响应的处置步骤。详细说来,开辟职员经由过程该节能够
设置要显现的html毛病页以取代毛病仓库跟踪。
-->
<customErrorsmode="RemoteOnly"defaultRedirect="GenericErrorPage.htm">
<!--
<errorstatusCode="403"redirect="NoAccess.htm"/>
<errorstatusCode="404"redirect="FileNotFound.htm"/>
-->
</customErrors>
<!--
完整限制客户端重定向的URL
有些挪动设备请求对客户端重定向的URL举行完整限制。
-->
<httpRuntimeuseFullyQualifiedRedirectUrl="true"/>
<!--
指定无Cookie的数据字典范例
这将使字典内容呈现在当地哀求url查询字符串中。
这是在无Cookie的设备长进行Forms身份考证所必须的。
-->
<mobileControlscookielessDataDictionaryType="System.Web.Mobile.CookielessData"/>
<sessionStatemode="InProc"cookieless="true"timeout="20"></sessionState>
<deviceFilters>
<filtername="isJPhone"compare="Type"argument="J-Phone"/>
<filtername="isHTML32"compare="PreferredRenderingType"argument="html32"/>
<filtername="isWML11"compare="PreferredRenderingType"argument="wml11"/>
<filtername="isCHTML10"compare="PreferredRenderingType"argument="chtml10"/>
<filtername="isGoAmerica"compare="Browser"argument="Go.Web"/>
<filtername="isMME"compare="Browser"argument="MicrosoftMobileExplorer"/>
<filtername="isMyPalm"compare="Browser"argument="MyPalm"/>
<filtername="isPocketIE"compare="Browser"argument="PocketIE"/>
<filtername="isUP3x"compare="Type"argument="Phone.com3.xBrowser"/>
<filtername="isUP4x"compare="Type"argument="Phone.com4.xBrowser"/>
<filtername="isEricssonR380"compare="Type"argument="EricssonR380"/>
<filtername="isNokia7110"compare="Type"argument="Nokia7110"/>
<filtername="prefersGIF"compare="PreferredImageMIME"argument="image/gif"/>
<filtername="prefersWBMP"compare="PreferredImageMIME"argument="image/vnd.wap.wbmp"/>
<filtername="supportsColor"compare="IsColor"argument="true"/>
<filtername="supportsCookies"compare="Cookies"argument="true"/>
<filtername="supportsJavaScript"compare="Javascript"argument="true"/>
<filtername="supportsVoiceCalls"compare="CanInitiateVoiceCall"argument="true"/>
</deviceFilters>
</system.web>
</configuration>
上面的是PocketIE和Openwave扫瞄器在运转该程序时的截图:
辨认Selection列表控件中被选中的数据项(多项形式)
在Selection列表控件的多选形式下,你必需检测列表中的每一个数据项,以便断定那些数据项处于选中的形态。前文说起过,我们可使用Selection列表控件的Items属性来会见MobileListItemCollection工具。在该汇合中,那些处于选中形态的MobileListItem工具,其Selected属性的属性值将为true。上面的程序清单就是用来指出列表中那些数据项处于选中的形态:
Default.aspx:
<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits="_Default"%>
<%@RegisterTagPrefix="mobile"Namespace="System.Web.UI.MobileControls"Assembly="System.Web.Mobile"%>
<htmlxmlns="http://www.w3.org/1999/xhtml">
<body>
<mobile:Formid="Form1"runat="server">
<mobile:LabelID="Label1"Runat="server">请选择想要购置的手器品牌</mobile:Label>
<mobile:SelectionListID="SelectionList1"Runat="server"SelectType="MultiSelectListBox">
<ItemText="Dopoda"Value="P800"/>
<ItemText="Motorola"Value="A1200"/>
<ItemText="Nokia"Value="N70"/>
<ItemText="Samsung"Value="E638"/>
</mobile:SelectionList>
<mobile:CommandID="Command1"Runat="server">提交选择</mobile:Command>
</mobile:Form>
<mobile:FormID="Form2"Runat="server">
<mobile:LabelID="Label2"Runat="server">你选择的手机型号为:</mobile:Label>
<mobile:TextViewID="TextView1"Runat="server">TextView</mobile:TextView>
</mobile:Form>
</body>
</html>
程序代码申明:因为我们要在这个列表控件中完成多选,为此将Selection列表控件的SelectType设置为MultiSelectListBox。尔后在Form2控件中增加一个TextView控件,使得一切被选中的数据项的字符信息和埋没值信息都能够显现出来。
Default.aspx.cs:
usingSystem;
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Web;
usingSystem.Web.Mobile;
usingSystem.Web.SessionState;
usingSystem.Web.UI;
usingSystem.Web.UI.MobileControls;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.HtmlControls;
publicpartialclass_Default:System.Web.UI.MobileControls.MobilePage
{
protectedvoidHandleMultiTeamSelection(objectsender,EventArgse)
{
this.ActiveForm=Form2;
//Getthelistitemscollection.
MobileListItemCollectioncolItems=SelectionList1.Items;
StringstrDisplaytext="";
foreach(MobileListItemitemincolItems)
{
if(item.Selected)
{
strDisplaytext+=(item.Text+item.Value+"<BR>");
}
}
TextView1.Text=strDisplaytext;
}
}
上面的对应的截图:
绑定命据源
上面这个示例将创立一个复杂的ArrayList汇合,作为Selection列表控件的数据源。在代码后置文件中,我们创立了一个Mobile类,用来存取每一个数据项。在Page_Load事务处置函数中,我们将创立好的Mobile工具增加到一个ArrayList汇合中。尔后,将Selection列表控件与该ArrayList汇合绑定。最初经由过程一个foreach语句迭代全部列表,并将各个数据项中的信息以一个字符串的情势显现在页面上。
Default.aspx
<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits="_Default"%>
<%@RegisterTagPrefix="mobile"Namespace="System.Web.UI.MobileControls"Assembly="System.Web.Mobile"%>
<htmlxmlns="http://www.w3.org/1999/xhtml">
<body>
<mobile:Formid="Form1"runat="server">
<mobile:LabelID="Label1"Runat="server">请选择想要购置的手器品牌</mobile:Label>
<mobile:SelectionListID="SelectionList1"Runat="server"SelectType="MultiSelectListBox"DataTextField="Manufacturer"DataValueField="Model">
</mobile:SelectionList>
<mobile:CommandID="Command1"Runat="server">提交选择</mobile:Command>
</mobile:Form>
<mobile:FormID="Form2"Runat="server">
<mobile:LabelID="Label2"Runat="server">你选择的手机型号为:</mobile:Label>
<mobile:TextViewID="TextView1"Runat="server">TextView</mobile:TextView>
</mobile:Form>
</body>
</html>
Default.aspx.cs:
usingSystem;
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Web;
usingSystem.Web.Mobile;
usingSystem.Web.SessionState;
usingSystem.Web.UI;
usingSystem.Web.UI.MobileControls;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.HtmlControls;
publicpartialclass_Default:System.Web.UI.MobileControls.MobilePage
{
protectedvoidPage_Load(objectsender,EventArgse)
{
if(!IsPostBack)
{
ArrayListarray=newArrayList();
array.Add(newMobileTelephone("Dopoda","P800"));
array.Add(newMobileTelephone("Motorola","A1200"));
array.Add(newMobileTelephone("Nokia","N70"));
array.Add(newMobileTelephone("Samsung","E638"));
SelectionList1.DataSource=array;
SelectionList1.DataBind();
}
}
protectedvoidHandleMultiSelection(objectsender,EventArgse)
{
this.ActiveForm=Form2;
//Getthelistitemscollection.
MobileListItemCollectioncolItems=SelectionList1.Items;
StringstrDisplaytext="";
foreach(MobileListItemitemincolItems)
{
if(item.Selected)
{
strDisplaytext+=(item.Text+item.Value+
"<br/>");
}
}
TextView1.Text=strDisplaytext;
}
}
Mobile.cs:
usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
///<summary>
///TeamStats的择要申明
///</summary>
publicclassMobileTelephone
{
privateStringmanufacturer,model;
publicMobileTelephone(Stringmanufacturer,Stringmodel)
{
this.manufacturer=manufacturer;
this.model=model;
}
publicStringManufacturer{get{returnthis.manufacturer;}}
publicStringModel{get{returnthis.model;}}
}
在经过全球个人PC市场占有90%的微软对asp.net不断优化与整合后,asp.net与微软自身平台的动用上更加的高效,加上asp.net在应用上非常容易上手,相信asp.net仍会是最多客户选用的脚本语言,并会在未来几年继续领跑。 ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。 碰到复杂点的问题都不知道能不能解决,现在有点实力的公司都选择自已在开源的基础上做开发。但没听说过有人在IIS上做改进的,windows、sqlserver集群方面的应用也很少见。 最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。 主流网站开发语言之PHP:PHP的全名非常有趣,它是一个巢状的缩写名称——“PHP:HypertextPreprocessor”,打开缩写还是缩写。PHP是一种HTML内嵌式的语言(就像上面讲的ASP那样)。而PHP独特的语法混合了C,Java,Perl以及PHP式的新语法。它可以比CGI或者Perl更快速地执行动态网页。 在一个项目中谁敢保证每天几千万甚至几亿条的数据不丢失?谁敢保证应用的高可靠性?有可以借签的项目吗? 如今主流的Web服务器软件主要由IIS或Apache组成。IIS支持ASP且只能运行在Windows平台下,Apache支持PHP,CGI,JSP且可运行于多种平台,虽然Apache是世界使用排名第一的Web服务器平台。 最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。 CGI程序在运行的时候,首先是客户向服务器上的CGI程序发送一个请求,服务器接收到客户的请求后,就会打开一个新的Process(进程)来执行CGI程序,处理客户的请求。CGI程序最后将执行的结果(HTML页面代码)传回给客户。 ASP.net的速度是ASP不能比拟的。ASP.net是编译语言,所以,当第一次加载的时候,它会把所有的程序进行编译(其中包括worker进程,还有对语法进行编译,形成一个程序集),当程序编译后,执行速度几乎为0。
页:
[1]