1、 第5章 Web窗体的基本控件 与ASP不同的是,ASP.NET提供了大量的控件,这些控件能够轻松的实现一个交互复杂的Web应用功能。在传统的ASP开发中,让开发人员最为烦恼的是代码的重用性太低,以及事件代码和页面代码不能很好的分开。而在ASP.NET中,控件不仅解决了代码重用性的问题,对于初学者而言,控件还简单易用并能够轻松上手、投入开发。 5.1 控件的属性 每个控件都有一些公共属性,例如字体颜色、边框的颜色、样式等。在Visual Studio 2008中,当开发人员将鼠标选择了相应的控件后,属性栏中会简单的介绍该属性的作用。如图5-1所示。 图5-1 控件的属性
2、属性栏用来设置控件的属性,当控件在页面被初始化时,这些将被应用到控件。控件的属性也可以通过编程的方法在页面相应代码区域编写,示例代码如下所示。 protected void Page_Load(object sender, EventArgs e) { Label1.Visible = false ;//在Page_Load中设置Label1的可见性 } 上述代码编写了一个Page_Load(页面加载事件),当页面初次被加载时,会执行Page_Load中的代码。这里通过编程的方法对控件的属性进行更改,
3、当页面加载时,控件的属性会被应用并呈现在浏览器。 5.2 简单控件 ASP.NET提供了诸多控件,这些控件包括简单控件、数据库控件、登录控件等强大的控件。在ASP.NET中,简单控件是最基础也是经常被使用的控件,简单控件包括标签控件(Label)、超链接控件(HyperLink)以及图像控件(Image)等。 5.2.1 标签控件(Label) 在Web应用中,希望显式的文本不能被用户更改,或者当触发事件时,某一段文本能够在运行时更改,则可以使用标签控件(Label)。开发人员可以非常方便的将标签控件拖放到页面,拖放到页面后,该页面将自动生成一段标签控件的声明代码,示例代码如下所示
4、
5、age_PreInit(object sender, EventArgs e) { Label1.Text = "Hello World"; //标签赋值 } 上述代码在页面初始化时为Label1的文本属性设置为“Hello World”。值得注意的是,对于Label标签,同样也可以显式HTML样式,示例代码如下所示。 protected void Page_PreInit(object sender, EventArgs e) { Label1.T
6、ext = "Hello World
7、多,会导致性能问题。使用静态的HTML文本能够让页面解析速度更快。
5.2.2 超链接控件(HyperLink)
超链接控件相当于实现了HTML代码中的“”效果,当然,超链接控件有自己的特点,当拖动一个超链接控件到页面时,系统会自动生成控件声明代码,示例代码如下所示。
8、的属性可以被改变。超链接控件通常使用的两个属性如下所示:
q ImageUrl:要显式图像的URL。
q NavigateUrl:要跳转的URL。
1.ImageUrl属性
设置ImageUrl属性可以设置这个超链接是以文本形式显式还是以图片文件显式,示例代码如下所示。
10、前面的小结讲解了超链接控件的优点,超链接控件的优点在于能够对控件进行编程,来按照用户的意愿跳转到自己跳转的页面。以下代码实现了当用户选择QQ时,会跳转到腾讯网站,如果选择SOHU,则会跳转到SOHU页面,示例代码如下所示。 protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { if (DropDownList1.Text == "qq") //如果选择qq {
11、 HyperLink1.Text = "qq"; //文本为qq HyperLink1.NavigateUrl = ""; //URL为 } else //选择sohu { HyperLink1.Text = "sohu"; //文本为sohu HyperLink1.NavigateUrl = ""; //URL为 }
12、 } 上述代码使用了DropDownList控件,当用户选择不同的值时,对HyperLink1控件进行操作。当用户选择qq,则为HyperLink1控件配置连接为。 注意:与标签控件相同的是,如果只是为了单纯的实现超链接,同样不推荐使用HyperLink控件,因为过多的使用服务器控件同样有可能造成性能问题。 5.2.3 图像控件(Image) 图像控件用来在Web窗体中显示图像,图像控件常用的属性如下: q AlternateText:在图像无法显式时显示的备用文本。 q ImageAlign:图像的对齐方式。 q ImageUrl:要显示图像的URL。 当图片
13、无法显示的时候,图片将被替换成AlternateText属性中的文字,ImageAlign属性用来控制图片的对齐方式,而ImageUrl属性用来设置图像连接地址。同样,HTML中也可以使用来替代图像控件,图像控件具有可控性的优点,就是通过编程来控制图像控件,图像控件基本声明代码如下所示。
14、yAlternateText:如果将此属性设置为true,则呈现的图片的alt属性将设置为空。
开发人员能够为Image控件配置相应的属性以便在浏览时呈现不同的样式,创建一个Image控件也可以直接通过编写HTML代码进行呈现,示例代码如下所示。
20、
23、 { } protected void Button1_Click(object sender, EventArgs e) //双击按钮时触发的事件 { Label1.Text = TextBox1.Text; //标签控件的值等于文本框中控件的值 } } } 上述代码中,当双击按钮时,就会触发一个按钮事件,这个事件就是将文本框内的值赋值到标签内,运行结果如图5-4所示。 图5-4 文本框控件的使用 同样,双击文本框控件,会触发TextChange
24、事件。而当运行时,当文本框控件中的字符变化后,并没有自动回传,是因为默认情况下,文本框的AutoPostBack属性被设置为false。当AutoPostBack属性被设置为true时,文本框的属性变化,则会发生回传,示例代码如下所示。 protected void TextBox1_TextChanged(object sender, EventArgs e) //文本框事件 { Label1.Text = TextBox1.Text; //控件相互赋值 } 上述代码中,为TextBox1添
25、加了TextChanged事件。在TextChanged事件中,并不是每一次文本框的内容发生了变化之后,就会重传到服务器,这一点和WinForm是不同的,因为这样会大大的降低页面的效率。而当用户将文本框中的焦点移出导致TextBox就会失去焦点时,才会发生重传。 5.4 按钮控件(Button,LinkButton,ImageButton) 在Web应用程序和用户交互时,常常需要提交表单、获取表单信息等操作。在这其间,按钮控件是非常必要的。按钮控件能够触发事件,或者将网页中的信息回传给服务器。在ASP.NET中,包含三类按钮控件,分别为Button、LinkButton、ImageBut
26、ton。
5.4.1 按钮控件的通用属性
按钮控件用于事件的提交,按钮控件包含一些通用属性,按钮控件的常用通用属性包括有:
q Causes Validation:按钮是否导致激发验证检查。
q CommandArgument:与此按钮管理的命令参数。
q CommandName:与此按钮关联的命令。
q ValidationGroup:使用该属性可以指定单击按钮时调用页面上的哪些验证程序。如果未建立任何验证组,则会调用页面上的所有验证程序。
下面的语句声明了三种按钮,示例代码如下所示。
28、 Click单击事件 这三种按钮控件对应的事件通常是Click单击和Command命令事件。在Click单击事件中,通常用于编写用户单击按钮时所需要执行的事件,示例代码如下所示。 protected void Button1_Click(object sender, EventArgs e) { Label1.Text = "普通按钮被触发"; //输出信息 } protected void LinkButton1_Click(object sender, EventArgs
29、e) { Label1.Text = "连接按钮被触发"; //输出信息 } protected void ImageButton1_Click(object sender, ImageClickEventArgs e) { Label1.Text = "图片按钮被触发"; //输出信息 } 上述代码分别为三种按钮生成了事件,其代码都是将Label1的文本设置为相应的文本,运行结果如图5-6所示。 图5-6
30、按钮的Click事件 5.4.3 Command命令事件 按钮控件中,Click事件并不能传递参数,所以处理的事件相对简单。而Command事件可以传递参数,负责传递参数的是按钮控件的CommandArgument和CommandName属性。如图5-7所示。 图5-7 CommandArgument和CommandName属性 将CommandArgument和CommandName属性分别设置为Hello!和Show,单击创建一个Command事件并在事件中编写相应代码,示例代码如下所示。 protected void Button1_Command(ob
31、ject sender, CommandEventArgs e) { if (e.CommandName == "Show") //如果CommandNmae属性的值为Show,则运行下面代码 { Label1.Text = e.CommandArgument.ToString();//CommandArgument属性的值赋值给Label1 } } 注意:当按钮同时包含Click和Command事件时,通常情况下会执行Command事件。
32、Command有一些Click不具备的好处,就是传递参数。可以对按钮的CommandArgument和CommandName属性分别设置,通过判断CommandArgument和CommandName属性来执行相应的方法。这样一个按钮控件就能够实现不同的方法,使得多个按钮与一个处理代码关联或者一个按钮根据不同的值进行不同的处理和响应。相比Click单击事件而言,Command命令事件具有更高的可控性。 5.5 单选控件和单选组控件(RadioButton和RadioButtonList) 在投票等系统中,通常需要使用单选控件和单选组控件。顾名思义,在单选控件和单选组控件的项目中,只能在有
33、限种选择中进行一个项目的选择。在进行投票等应用开发并且只能在选项中选择单项时,单选控件和单选组控件都是最佳的选择。
5.5.1 单选控件(RadioButton)
单选控件可以为用户选择某一个选项,单选控件常用属性如下所示。
q Checked:控件是否被选中。
q GroupName:单选控件所处的组名。
q TextAlign:文本标签相对于控件的对齐方式。
单选控件通常需要Checked属性来判断某个选项是否被选中,多个单选控件之间可能存在着某些联系,这些联系通过GroupName进行约束和联系,示例代码如下所示。
34、"RadioButton1" runat="server" GroupName="choose"
Text="Choose1" />
35、tected void RadioButton1_CheckedChanged(object sender, EventArgs e)
{
Label1.Text = "第一个被选中";
}
protected void RadioButton2_CheckedChanged(object sender, EventArgs e)
{
Label1.Text = "第二个被选中";
}
上述代码中,当选中状态被改变时,则触发相应的事件。运行结果如图5- 36、8所示。
图5-8 单选控件的使用
与TextBox文本框控件相同的是,单选控件不会自动进行页面回传,必须将AutoPostBack属性设置为true时才能在焦点丢失时触发相应的CheckedChanged事件。
5.5.2 单选组控件(RadioButtonList)
与单选控件相同,单选组控件也是只能选择一个项目的控件,而与单选控件不同的是,单选组控件没有GroupName属性,但是却能够列出多个单选项目。另外,单选组控件所生成的代码也比单选控件实现的相对较少。单选组控件添加项如图5-9所示。
图5-9 单选组控件添加项
添加项目后,系统自动在.aspx页面声明服 37、务器控件代码,代码如下所示。
38、用于样式和重复的配置。单选组控件的常用属性如下所示:
q DataMember:在数据集用做数据源时做数据绑定。
q DataSource:向列表填入项时所使用的数据源。
q DataTextFiled:提供项文本的数据源中的字段。
q DataTextFormat:应用于文本字段的格式。
q DataValueFiled:数据源中提供项值的字段。
q Items:列表中项的集合。
q RepeatColumn:用于布局项的列数。
q RepeatDirection:项的布局方向。
q RepeatLayout:是否在某个表或者流中重复。
同单选控件一样,双击单选组控件时系 39、统会自动生成该事件的声明,同样可以在该事件中确定代码。当选择一项内容时,提示用户所选择的内容,示例代码如下所示。
protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)
{
Label1.Text = RadioButtonList1.Text; //文本标签段的值等于选择的控件的值
}
5.6 复选框控件和复选组控件(CheckBox和CheckBoxList)
当一个投票系统需要用户能够选择多个 40、选择项时,则单选框控件就不符合要求了。ASP.NET还提供了复选框控件和复选组控件来满足多选的要求。复选框控件和复选组控件同单选框控件和单选组控件一样,都是通过Checked属性来判断是否被选择。
5.6.1 复选框控件(CheckBox)
同单选框控件一样,复选框也是通过Check属性判断是否被选择,而不同的是,复选框控件没有GroupName属性,示例代码如下所示。
41、ox ID="CheckBox2" runat="server" Text="Check2" AutoPostBack="true"/>
上述代码中声明了两个复选框控件。对于复选框空间,并没有支持的GroupName属性,当双击复选框控件时,系统会自动生成方法。当复选框控件的选中状态被改变后,会激发该事件。示例代码如下所示。
protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
Label1.Text = "选框1被选中"; //当选 42、框1被选中时
}
protected void CheckBox2_CheckedChanged(object sender, EventArgs e)
{
Label1.Text = "选框2被选中,并且字体变大"; //当选框2被选中时
Label1.Font.Size = FontUnit.XXLarge;
}
上述代码分别为两个选框设置了事件,设置了当选择选框1时,则文本标签输出“选框1被选中” ,如图5-10所示。当选择选框2时,则输出“选框2被选中,并且 43、字体变大”,运行结果如图5-11所示。
图5-10 选框1被选中 图5-11 选框2被选中
对于复选框而言,用户可以在复选框控件中选择多个选项,所以就没有必要为复选框控件进行分组。在单选框控件中,相同组名的控件只能选择一项用于约束多个单选框中的选项,而复选框就没有约束的必要。
5.6.2 复选组控件(CheckBoxList)
同单选组控件相同,为了方便复选控件的使用,.NET服务器控件中同样包括了复选组控件,拖动一个复选组控件到页面可以同单选组控件一样添加复选组列表。添加在页面后,系统生成代码如下所示。
< 44、asp:CheckBoxList ID="CheckBoxList1" runat="server" AutoPostBack="True"
onselectedindexchanged="CheckBoxList1_SelectedIndexChanged">
45、Item Value="Choose3">Choose3
上述代码中,同样增加了3个项目提供给用户选择,复选组控件最常用的是SelectedIndexChanged事件。当控件中某项的选中状态被改变时,则会触发该事件。示例代码如下所示。
protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e)
{
if (CheckBoxList1.Items[0 46、].Selected) //判断某项是否被选中
{
Label1.Font.Size = FontUnit.XXLarge; //更改字体大小
}
if (CheckBoxList1.Items[1].Selected) //判断是否被选中
{
Label1.Font.Size = FontUnit.XLarge; //更改字体大小
}
if ( 47、CheckBoxList1.Items[2].Selected)
{
Label1.Font.Size = FontUnit.XSmall;
}
}
上述代码中,CheckBoxList1.Items[0].Selected是用来判断某项是否被选中,其中Item数组是复选组控件中项目的集合,其中Items[0]是复选组中的第一个项目。上述代码用来修改字体的大小,如图5-12所示,当选择不同的选项时,字体的大小也不相同,运行结果如图5-13所示。
图5-12 选择大号字体 48、 图5-13 选择小号字体
正如图5-12、5-13所示,当用户选择不同的选项时,Label标签的字体的大小会随之改变。
注意:复选组控件与单选组控件不同的是,不能够直接获取复选组控件某个选中项目的值,因为复选组控件返回的是第一个选择项的返回值,只能够通过Item集合来获取选择某个或多个选中的项目值。
5.7 列表控件(DropDownList,ListBox和BulletedList)
在Web开发中,经常会需要使用列表控件,让用户的输入更加简单。例如在用户注册时,用户的所在地是有限的集合,而且用户不喜欢经常键入,这样就可以使用列表控件。同样列表控件还能够简化用户输入并且防止用户输入在实际中不存在的数据,如性别的选择等。
5.7.1 DropDownList列表控件
列表控件能在一个控件中为用户提供多个选项,同时又能够避免用户输入错误的选项。例如,在用户注册时,可以选择性别是男,或者女,就可以使用DropDownList列表控件,同时又避免了用户输入其他的信息。因为性别除了男就是女,输入其他的信息说明这个信息是错误或者是无效的。下列语句声明了一个DropDownList列表控件,示例代码如下所示。






