已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章使用Web服务器控件构建表单构建智能表单你可以使用几个基本的Web控件代表标准HTML表单元素如单选按钮、文本框和列表框。你也可以在ASP.NET页面中使用这些控件来创建你的web应用中的用户界面接口。以下内容提供了详细的实例演示如何使用这些web控件。警告: 参阅附录C中“web控件参考”可以查看web控件所有的属性,方法和事件。警告:你必须小心分析你要解决的问题的境况,并且在使用工具上做个聪明的决定。如果你在一个区域中需要它是高效率的,而选择数据结构或算法有一个弱点,那它就可能导致灾难。使用标签控件向web表单页中添加静态文本的最简便的方法就是简单的向页面的body域中添加一个文本区域。但是如果你想要在你的代码中修改页面中显示的文本,你就需要使用一个标签控件来控制文本的显示。参阅Table 2.1可以查看这个控件的所有属性和方法。Table 2.1. Label Properties, Methods, and Events.Label控件有一个非常重要的属性:Text。你可以将任何你想使用的text或者是HTML内容赋值给这个属性。在页面上Label控件出现的地方,Text属性值的任何内容都会被显示出来。你可以使用两种方来为Text这个属性赋值:声明或是编程方式。首先,当你在页面中声明控件时可以像这样来为它赋值:1) 此外,你也可以在页面中使用编码的方式来为这个text指定值,例如,Listing 2.1中的页面可以根据不同的时间在标签控件中现实不同的内容。Listing 2.1 Label.aspx1) 1)2) 3) 4) 5) 6) 在光盘中可以查阅C#版本的代码在Listing 2.1中,可以根据一天中的不同时间将“Good Morning”和“Good Day”赋值给TextLabel控件中的内容放在一个标签中(如果你需要查看这个标签你可以在浏览框中点击查看源代码)。这意味着你必须对在哪里使用Label控件保持谨慎。例如,在标签中使用该控件就不是很合适,因为“”这个标签名字也可能出现在标题中。NOTE文本控制与Label控制非常相似,只是没有使用标签。你可以在标签中使用LiteralControl使用文本框控件文本框控件有三种不同的HTML标签。该控件可以用来展示HTML标准文本输入框,HTML标准密码输入框,或者是一个HTML文本域。参阅Table 2.2查看该控件的所有属性,方法,和事件。Table 2.2. TextBox Properties, Methods, and EventsListing 2.2中阐明了如何使用文本域控件来显示一个单行文本框,密码文本框或是多行文本域。Listing 2.2 textbox.aspx1) 2) 3) 4) Username:5) Password:6) Comments:7) 8) 光盘中附有C#版本的代码。尽管同一个web控件TextBox,被用来创建Username,Password,和Comments域,但是显示的是非常不同的用户界面。TextBox控件的TextMode属性决定了用户界面的不同。Figure 2.1. A TextBox control with different TextMode properties.TextMode属性可以有以下三种值: SingleTextMode控件的默认值。当TextMode属性值被制定为Single是,会显示一个常规的单行的文本输入框 Password当TextMode的属性值被制定为Password时,会显示一个密码文本输入框,并且该文本框中的内容被隐藏。 MultiLine当TextMode的属性值被制定为MultiLine时,会显示一个文本域。NOTETextMode的属性值是互斥的。这意味着你不能创建一个多行密码文本框。这其实并不奇怪,因为ASP.NET控件只能通过HTML的方式来显示,而在HTML中并没有多行密码文本框这样的元素。应该NOTE到,与HTML中的标签有所不同的是,TextBox控件中并没有Size这个属性。相应的,一个文本域的水平方向的字节数是由Columns这个属性来决定的。在一个多行文本域中,垂直方向的大小由Rows属性来指明。Columns和Rows属性共同决定了字数的多少。NOTE你也可以使用基本的web控件类中的Height和Width属性来指定一个文本框的水平和垂直方向的大小。使用这些属性的优点是可以不使用像素和百分比等单位。文本框控件同时拥有一个MaxLength属性,你可以使用这个属性来限定输入到一个文本框中的字符数。只有当文本框的TextMode属性为Single或Password时这个属性才有效。对于多行文本框,你不可以应用MaxLength属性。如果你需要限定输入到多行文本框中的字符数,可以使用RegularExpressionValidator or CustomValidator进行有效控制。给一个文本框赋值文本内容你可以使用TextBox控件的Text属性来为一个文本域赋值或是从该文本区域获取用户已输入的值。你可以按一下两种方式来使用这一属性:1)在声明该控件的时候为TextBox指定一个默认值,示例如下:1) 2)从代码行中为文本区域赋值或从中读取值。例如,在Listing 2.3中,“country”文本框中的默认值在页面首次加载时为“United States”。Listing 2.3 TextBoxText.aspx1) 2) Sub Page_Load( s As Object, e As EventArgs )3) If Not IsPostBack ThentxtCountry.Text = United States4) End If5) End Sub6) 7) 8) 光盘中附有C#版本的代码。NOTE如何为一个文本框赋值带有引号的值呢?例如,你想要为一个Comments文本框设置初值为:他说“Good Morning!”,如果尝试使用以下方式,将会出现错误:Comments.Text = He said Good Morning! 为文本框Text属性赋值带引号的字符串,你需要使用两个双引号。如下所示:Comments.Text = He said Good Morning! 当在页面中使用双引号时,双引号实际表示为:";控制TextBox控件的TextChanged事件TextBox控件有一个TextChanged事件,只要当文本框中的内容发生了变化或是表单中包含的文本框被传送到服务器,都会触发这一事件。例如,在Listing 2.4中,使用TextChanged事件来检测表单中的文本框中的内容是否改变。Listing 2.4 TextBoxChanged.aspx1) 2) Sub Page_Load3) lblMessage.Text = 4) End Sub5) Sub txtSomeText_TextChanged( s As Object, e As EventArgs )6) lblMessage.Text = You changed the value!7) End Sub8) 9) 10) 11) 光盘中附有C#版本的代码。在Listing 2.4中,当ID为“txtSomeText”的控件的内容改变时,txtSomeText的TextChanged属性的子程序会被自动调用。这个子程序会在名为lbMessage的Label控件中显示你已经改变了文本框的值!。应当注意到,每次在页面加载时Page_Load子程序都会清空Label控件中的值。Page_Load子程序总是会先于TextChanged事件执行。你需要使用一个Page_Load事件因为Label控件参与表单的视图状态。如果在每次加载之前没有清空该控件中的内容,那么将会自动保留其中的值并且在页面间进行传送。这将会导致总是显示你以改变了文本框的值,尽管文本框中的内容并没有改变。TextBox控件的AutoPostBack属性TextBox控件同样有一个AutoPostBack属性。当AutoPostBack的值为true时,包含文本框的表单都会被自动传送,不管文本框中的值是否改变。当AutoPostBack被激活时会导致页面捕获TextBox的OnChange事件并同时传送JavaScript代码到浏览器。因为AutoPostBack属性依赖于Javascript,所以你不能使用比较旧的浏览器版本。(在最新的IE和Netscape Navigator版本中使用效果较好)例如,在Listing 2.5中,利用AutoPostBack属性来创建一个简单的游戏。这个页面包含三个文本框。在这个游戏中,你必须在三个文本框中都输入Apple才能胜利。Listing 2.5 TextBoxAutoPostBack.aspx1) 2) Sub ChangeBox1( s As Object, e As EventArgs )3) txtBox1.Text = strReverse( txtBox1.Text )4) CheckWin5) End Sub6) Sub changeBox3( s As Object, e As EventArgs )7) txtBox3.Text = strReverse( txtBox3.Text )8) CheckWin9) End Sub10) Sub CheckWin11) If txtBox1.Text = Apple _12) And txtBox2.Text=Apple _13) And txtBox3.Text=Apple Then14) lblMessage.Text = You Win!15) End If16) End Sub17) 18) 19) 20) 光盘中附有C#版本的代码。示例中三个文本框的AutoPostBack属性的值均为true。如果你改变了文本框中的内容,包含该文本框的表单会被自动提交,并且会触发与之相关联的子程序。例如,你改变了第二个文本框中的内容,changeeBox1的子程序会执行。这个子程序会将第一个文本框中的内容反转。如果你成功地在三个文本框中都输入“Apple”,在名为lblMessage的Label控件中会显示“You Win!”这一信息。(参阅Figure 2.2)Figure 2.2. The TextBox controls AutoPostBack property.通过请求验证限制文本框输入ASP.NET 1.1中引进了一个名为Requeset Validation的新特性。当Requeset Validation被激活时(默认状态为激活),不能保证你可以在系统不抛出错误的情况下想文本框中输入特定的内容。例如,不被允许想文本框中添加“”这样的HTML标签,并且你也不能向文本框中添加存在潜在危险的字符运算式“(”。ASP.NET框架中添加请求验证是为了应对跨站点脚本攻击隐患。如果允许用户向文本框中输入任意内容,并且可在你的网站上显示,那么用户有可能在你的服务器上使用javascript脚本来执行一些恶意和可恨的任务。例如,如果你正在运行一个留言板,那么用户可以发送一个信息将所有查看该消息的人重定向到PlayB网站。NOTE请求验证是有一个底层维护的名为CrossSiteScriptingValidation的私有类实现的。(这个类在System.Web命名空间中)。如果你想知道具体的是那些字符串非法,你可以使用ILDASM工具集来查看这个类的相应的方法。然而,总有一些特定的情况你需要禁用请求验证。如果你允许用户向文本框中输入HTML内容,可以在页面或应用程序级别禁用请求验证功能。如果需要禁用整个应用程序,可以向程序的根文件Web.Config中添加元素到区域(根文件Web.Config将在15章“Creating ASP.NET Applications”中讲述):使用按钮控件你可以通过web控件向一个表单中添加三种类型的按钮。 Button显示一个标准的HTML表单按钮 ImageButton显示一个图片表单按钮 LinkButton显示一个超文本连接当三种按钮被点击时都会触发同一个事件:它们都会将包含该按钮的表单提交给web服务器。按钮控件默认情况下,Button控件呈现出与使用常规HTML标签相同的形式:一个灰色的推压按钮。该控件所有的属性、方法和事件都在表2.3中列出Table 2.3. Button Properties, Methods, and Events当一个按钮被单击时,包含它的表单会被提交。当双击的时候相应的指令事件会被触发。你可以再你的页面中编写一个子程序来处理点击事件,如下所示:Sub Button_Click( s As Object, e As EventArgs )End Sub为了处理指令事件,你可以在页面中添加一个如下所示的子程序:Sub Buttom_Command( s As Object, e As CommandEventArgs )End Sub点击事件与指令事件的唯一区别是:指令事件会传送包括CommandName和CommandArgs属性的值,而点击事件不会。例如,在Listing 2.5中,有一个名为btnCounter_Click的子程序与按钮的点击事件相关联。这个子程序将按钮控中的文本属性值自加1.Listing 2.6 Button.aspx1) 2) Sub btnCounter_Click( s As Object, e As EventArgs )3) btnCounter.Text += 14) End Sub5) 6)7) 8) 9) 光盘中附有C#版本的代码。如果你需要在一个表单中添加多个按钮,并且需要根据点击不同的按钮来传递不同的信息,就可以使用指令事件而不是点击事件。例如,在Listing 2.7中的页面根据被点击的按钮的不同可以显示不同的值。Listing 2.7 ButtonCommand.aspx1) 2)3) Sub Button_Command( s As Object, e As CommandEventArgs )4) Dim intAmount As Integer5)6) intAmount = e.CommandArgument7) If e.CommandName = Add Then8) lblCounter.Text += intAmount9) Else10) lblCounter.Text -= intAmount11) End If12) End Sub13)14) 15)16) 17) 18) 光盘中附有C#版本的代码。当你点击Listing 2.7中的第一个按钮时,名为lbCounter的Label控件的值增加了5.该按钮的CommandName属性的值为Add,CommandArgument属性的值为5。当你点击第二个按钮时,名为lbCounter的Label控件的值减10.该空间的CommandName属性的值为Subtract,CommandArgument属性的值10.CommandName和CommandArgument的属性值都是从CommandEventArgs的参数中获得的(即传递给Button_Command子程序的第二个参数)。你可以根据你的喜好给CommandName和CommandArgument属性赋任意值。这些属性可以接收任何字符串值。图片按钮控件图片按钮控件与普通的按钮控件类似,不同之处在于图片按钮控件可以用来显示一张图片。表2.4中列出了图片按钮控件的所有的属性、方法和事件。Table 2.4. ImageButton Properties, Methods, and Events例如,在Listing 2.8中展示了一个简单的“点击这里”的图片按钮。Listing 2.8 ImageButton.aspx1) 2)3) Sub ImageButton_Click( s As Object, e As ImageClickEventArgs )4) Dim RanNum As New Random5) Select Case RanNum.Next( 3 )6) Case 07) lblMessage.Text = Boom!8) Case 19) lblMessage.Text = Zap!10) Case 211) lblMessage.Text = Yikes!12) End Select13) End Sub14)15) 16)17) 18) 19) 光盘中附有C#版本的代码。Figure 2.3. The ImageButton control.NOTE图片按钮控件的事件处理程序的格式如下:Sub ImageButton_Click( s As Object, e As ImageClickEventArgs )End Sub图片按钮控件还拥有一个名为ImageClickEventArgs的参数,在点击图片按钮时这个参数可以用来向事件处理子程序中传递参数。当点击该类型的按钮时,鼠标点击位置的x,y坐标会被传递。用户为什么需要使用这些信息呢?原因时,用户可以创建一个imagemap来代表多个按钮而仅使用一张图片。你可以通过检测ImageClickEventArgs参数的x,y属性来判断具体是哪个按钮被点击了。例如,Listing 2.9中的页面展示了一使用一个ImageButton空间来生成3个按钮的实例。当你点击三个按钮中的任何一个,ImageButton_Click子程序都会触发。通过空间的ImageClickEventArgs参数的X属性的值来判断三个按钮中的哪一个被点击了。Listing 2.9 ImageButtonEventArgs.aspx1) 2) Sub ImageButton_Click( s As Object, e As ImageClickEventArgs )3) Select Case e.X4) Case Is 955) lblMessage.Text = txtSomeText.Text.ToUpper()6) Case Is 1857) lblMessage.Text = txtSomeText.Text.ToLower()8) Case Is 2899) lblMessage.Text = 10) End Select11) End Sub12)13) 14)15) .16) 光盘中附有C#版本的代码。Figure 2.4. The ImageButton controls X and Y properties.链接按钮控件LinkButton控件和以上两种控件都很类似,不同之处在于LinkButton控件可以生成一个超文本链接。当你点击这个超链时,包含这个链接的表单中的所有的域都会被提交给服务器。表2.5中列出了该控件的所有的属性,方法和事件。Table 2.5. LinkButton Properties, Methods, and EventsLinkButton控件不能工作
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 社区道路维护合同范本
- 药品授权协议合同范本
- 2025年专升本法学专业宪法学训练试卷(含答案)
- 美容连锁加盟合同范本
- 物业旧物变卖合同范本
- 灵芝批发代理合同范本
- 美食嘉年华合作协议书
- 真空吸盘采购合同范本
- 翡翠增值回收合同范本
- 购物买卖小车合同范本
- 浙江省A9协作体2025-2026学年高二上学期期中联考英语试卷(含音频)
- 2025杭州西湖云创产业服务有限公司公开招聘工作人员6人笔试考试参考题库及答案解析
- 2025年红十字应急救护知识竞赛考试题库(含答案)
- 农户代耕代种协议书
- 2025内蒙古蒙智资本运营研究有限公司及子公司招聘工作人员4人笔试历年典型考点题库附带答案详解2套试卷
- 迈瑞心电监护仪使用流程
- 2025广西华盛集团北海裕泰工艺有限责任公司招聘4人(截止至11月15日)笔试历年典型考点题库附带答案详解试卷2套
- 华为ICT大赛考试题库(附答案)
- 天一大联考海南省2025-2026学年高三学业水平诊断(一)生物(含答案)
- 全国一等奖高一语文统编版必修下册《青蒿素:人类征服疾病的一小步》公开课精讲课件
- 2025年无线电广播接收设备行业分析报告及未来发展趋势预测
评论
0/150
提交评论