第5章Web窗体的基本控件与ASP不同的是,ASP.NET提供了大量的控件,这些控件能够轻松的实现一个交互复杂的Web应用功能。在传统的ASP开发中,让开发人员最为烦恼的是代码的重用性太低,以及事件代码和页面代码不能很好的分开。而在ASP.NET中,控件不仅解决了代码重用性的问题,对于初学者而言,控件还简单易用并能够轻松上手、投入开发。5.1控件的属性每个控件都有一些公共属性,例如字体颜色、边框的颜色、样式等。在VisualStudio2008中,当开发人员将鼠标选择了相应的控件后,属性栏中会简单的介绍该属性的作用。如图5-1所示。图5-1控件的属性属性栏用来设置控件的属性,当控件在页面被初始化时,这些将被应用到控件。控件的属性也可以通过编程的方法在页面相应代码区域编写,示例代码如下所示。protectedvoidPage_Load(objectsender,EventArgse){Label1.Visible=false;//在Page_Load中设置Label1的可见性}上述代码编写了一个Page_Load(页面加载事件),当页面初次被加载时,会执行Page_Load中的代码。这里通过编程的方法对控件的属性进行更改,当页面加载时,控件的属性会被应用并呈现在浏览器。1095.2简单控件ASP.NET提供了诸多控件,这些控件包括简单控件、数据库控件、登录控件等强大的控件。在ASP.NET中,简单控件是最基础也是经常被使用的控件,简单控件包括标签控件(Label)、超链接控件(HyperLink)以及图像控件(Image)等。5.2.1标签控件(Label)在Web应用中,希望显式的文本不能被用户更改,或者当触发事件时,某一段文本能够在运行时更改,则可以使用标签控件(Label)。开发人员可以非常方便的将标签控件拖放到页面,拖放到页面后,该页面将自动生成一段标签控件的声明代码,示例代码如下所示。asp:LabelID=Label1runat=serverText=Label/asp:Label上述代码中,声明了一个标签控件,并将这个标签控件的ID属性设置为默认值Label1。由于该控件是服务器端控件,所以在控件属性中包含runat=“server”属性。该代码还将标签控件的文本初始化为Label,开发人员能够配置该属性进行不同文本内容的呈现。注意:通常情况下,控件的ID也应该遵循良好的命名规范,以便维护。同样,标签控件的属性能够在相应的.cs代码中初始化,示例代码如下所示。protectedvoidPage_PreInit(objectsender,EventArgse){Label1.Text=HelloWorld;//标签赋值}上述代码在页面初始化时为Label1的文本属性设置为“HelloWorld”。值得注意的是,对于Label标签,同样也可以显式HTML样式,示例代码如下所示。protectedvoidPage_PreInit(objectsender,EventArgse){Label1.Text=HelloWorldhr/spanstyle=\color:red\AHtmlCode/span;//输出HTMLLabel1.Font.Size=FontUnit.XXLarge;//设置字体大小}上述代码中,Label1的文本属性被设置为一串HTML代码,当Label文本被呈现时,会以HTML效果显式,运行结果如图5-2所示。图5-2Label的Text属性的使用110如果开发人员只是为了显示一般的文本或者HTML效果,不推荐使用Label控件,因为当服务器控件过多,会导致性能问题。使用静态的HTML文本能够让页面解析速度更快。5.2.2超链接控件(HyperLink)超链接控件相当于实现了HTML代码中的“ahref=“”/a”效果,当然,超链接控件有自己的特点,当拖动一个超链接控件到页面时,系统会自动生成控件声明代码,示例代码如下所示。asp:HyperLinkID=HyperLink1runat=serverHyperLink/asp:HyperLink上述代码声明了一个超链接控件,相对于HTML代码形式,超链接控件可以通过传递指定的参数来访问不同的页面。当触发了一个事件后,超链接的属性可以被改变。超链接控件通常使用的两个属性如下所示:ImageUrl:要显式图像的URL。NavigateUrl:要跳转的URL。1.ImageUrl属性设置ImageUrl属性可以设置这个超链接是以文本形式显式还是以图片文件显式,示例代码如下所示。asp:HyperLinkID=HyperLink1runat=serverImageUrl=:HyperLink上述代码将文本形式显示的超链接变为了图片形式的超链接,虽然表现形式不同,但是不管是图片形式还是文本形式,全都实现的相同的效果。2.Navigate属性Navigate属性可以为无论是文本形式还是图片形式的超链接设置超链接属性,即即将跳转的页面,示例代码如下所示。asp:HyperLinkID=HyperLink1runat=serverImageUrl==:HyperLink上述代码使用了图片超链接的形式。其中图片来自“”,当点击此超链接控件后,浏览器将跳到URL为“”的页面。3.动态跳转在前面的小结讲解了超链接控件的优点,超链接控件的优点在于能够对控件进行编程,来按照用户的意愿跳转到自己跳转的页面。以下代码实现了当用户选择QQ时,会跳转到腾讯网站,如果选择SOHU,则会跳转到SOHU页面,示例代码如下所示。protectedvoidDropDownList1_SelectedIndexChanged(objectsender,EventArgse){if(DropDownList1.Text==qq)//如果选择qq{HyperLink1.Text=qq;//文本为qqHyperLink1.NavigateUrl=为qq.com}111else//选择sohu{HyperLink1.Text=sohu;//文本为sohuHyperLink1.NavigateUrl=为sohu.com}}上述代码使用了DropDownList控件,当用户选择不同的值时,对HyperLink1控件进行操作。当用户选择qq,则为HyperLink1控件配置连接为。注意:与标签控件相同的是,如果只是为了单纯的实现超链接,同样不推荐使用HyperLink控件,因为过多的使用服务器控件同样有可能造成性能问题。5.2.3图像控件(Image)图像控件用来在Web窗体中显示图像,图像控件常用的属性如下:AlternateText:在图像无法显式时显示的备用文本。ImageAlign:图像的对齐方式。ImageUrl:要显示图像的URL。当图片无法显示的时候,图片将被替换成AlternateText属性中的文字,ImageAlign属性用来控制图片的对齐方式,而ImageUrl属性用来设置图像连接地址。同样,HTML中也可以使用imgsrc=“”alt=“”来替代图像控件,图像控件具有可控性的优点,就是通过编程来控制图像控件,图像控件基本声明代码如下所示。asp:ImageID=Image1runat=server/除了显示图形以外,Image控件的其他属性还允许为图像指定各种文本,各属性如下所示。ToolTip:浏览器显式在工具提示中的文本。GenerateEmptyAlternateText:如果将此属性设置为true,则呈现的图片的alt属性将设置为空。开发人员能够为Image控件配置相应的属性以便在浏览时呈现不同的样式,创建一个Image控件也可以直接通过编写HTML代码进行呈现,示例代码如下所示。asp:ImageID=Image1runat=serverAlternateText=图片连接失效ImageUrl=上述代码设置了一个图片,并当图片失效的时候提示图片连接失效。注意:当双击图像控件时,系统并没有生成事件所需要的代码段,这说明Image控件不支持任何事件。5.3文本框控件(TextBox)在Web开发中,Web应用程序通常需要和用户进行交互,例如用户注册、登录、发帖等,那么就需要文本框控件(TextBox)来接受用户输入的信息。开发人员还可以使用文本框控件制作高级的文本编辑器用于HTML,以及文本的输入输出。5.3.1文本框控件的属性通常情况下,默认的文本控件(TextBox)是一个单行的文本框,用户只能在文本框中输入一行内112容。通过修改该属性,则可以将文本框设置为多行/或者是以密码形式显示,文本框控件常用的控件属性如下所示。AutoPostBack:在文本修改以后,是否自动重传Columns:文本框的宽度。EnableViewState:控件是否自动保存其状态以用于往返过程。MaxLength:用户输入的最大字符数。ReadOnly:是否为只读。Rows:作为多行文本框时所显式的行数。TextMode:文本框的模式,设置单行,多行或者密码。Wrap:文本框是否换行。1.AutoPostBack(自动回传)属性在网页的交互中,如果用户提交了表单,或者执行了相应的方法,那么该页面将会发送到服务器上,服务器将执行表单的操作或者执行相应方法后,再呈现给用户,例如按钮控件、下拉菜单控件等。如果将某个控件的AutoPostBack属性设置为true时,则如果该控件的属性被修改,那么同样会使页面自动发回到服务器。2.EnableViewState(控件状态)属性ViewState是ASP.NET中用来保存Web控件回传状态的一种机制,它是由ASP.NET页面框架管理的一个隐藏字段。在回传发生时,ViewState数据同样将回传到服务器,ASP.NET框架解析ViewState字符串并为页面中的各个控件填充该属性。而填充后,控件通过使用ViewState将数据重新恢复到以前的状态。在使用某些特殊的控件时,如数据库控件,来显示数据库。每次打开页面执行一次数据库往返过程是非常不明智的。开发人员可以绑定数据,在加载页面时仅对页面设置一次,在后续的回传中,控件将自动从ViewState中重新填充,减少了数据库的往返次数,从而不使用过多的服务器资源。在默认情况下,EnableViewState的属性值通常为true。3.其他属性上面的两个属性是比较重要的属性,其他的属性也经常使用。MaxLength:在注册时可以限制用户输入的字符串长度。ReadOnly:如果将此属性设置为true,那么文本框内的值是无法被修改的。TextMode:此属性可以设置文本框的模式,例如单行、多行和密码形式。默认情况下,不设置TextMode属性,那么文本框默认为单行。5.3.2文本框控件的使用在默认情况下,文本框为单行类型,同时文本框模式也包括多行和密码,示例代码如下所示。asp:TextBoxID=TextBox1runat=server/asp:TextBoxbr/br/asp:TextBoxID=TextBox2runat=serverHeight=101pxTextMode=