清华电脑学堂:ASP.NET 4.5网站开发与应用实践教程
上QQ阅读APP看书,第一时间看更新

3.4 选项控件

选项控件又称作选择控件,由开发人员事先将选项列出来,让用户选择。常见的有在填写性别时,提供两个选项(男、女)让用户选择。选项控件将程序能够接受并处理的选项内容列举出来,以防止用户输入的多样性。如同样是性别,用户的输入可能是:男性、男生、男人等词汇,此时程序在对用户信息进行处理时需要对信息进行处理筛选,增加了程序的复杂度。而使用选项控件可以有效地防止这一情况发生,简化对用户提交信息的处理。

选项控件包括单选框和复选框等,本节将一一介绍。

3.4.1 RadioButton控件

RadioButton控件通常被称作单选按钮,其显示样式是一个圆圈,在用户选中时圆圈中心有一个实心圆。RadioButton控件是单个出现的,通常用于选项较少的选择;若有多个选项可以选择,可以使用RadioButtonList控件,该控件是多个RadioButton控件的组合控件,显示为一组RadioButton。

单选按钮在工具箱中的符号为,通过RadioButton控件的相关属性可以设置其显示的外观,常用的外观属性如表3-4所示。

表3-4 RadioButton控件的常用属性

单个RadioButton控件在用户选中时引发Changed事件,默认情况下,该事件并不导致向服务器发送页面,但是通过将AutoPostBack属性设置为true可以使该控件强制立即发送。用户对单选框的选择结果,通过控件的Checked属性来获取。

注意

若要在选中RadioButton控件时将其发送到服务器,浏览器必须支持ECMAScript(如JScript和JavaScript),并且用户的浏览器要启用脚本撰写。

3.4.2 RadioButtonList控件

RadioButtonList控件与RadioButton控件所展示的都是一个可选的圆形控件,但RadioButtonList控件,常用于多选项的选择。在这个组合中的每一个RadioButton控件都是互斥的,即一个RadioButtonList中,只能有一个RadioButton控件处于选中状态。

RadioButtonList控件中的选项可以水平排列,也可以垂直排列。其在工具箱中的符号为,默认为垂直排列。

由于RadioButtonList控件派生自ListControl基类,因此工作方式与列表控件(如ListBox、DropDownList和BulletedList等)相似。

RadioButtonList控件包含RadioButton控件的多个属性,同时有着自己独特的属性。RadioButtonList还可以动态地绑定数据源,其常用属性如表3-5所示。

表3-5 RadioButtonList控件的常用属性

与单个RadioButton控件相反,RadioButtonList控件在用户更改列表中选定的单选按钮时会引发SelectedIndexChanged事件。默认情况下,该事件并不导致向服务器发送页面,但是可以通过将AutoPostBack属性设置为true来指定此选项。

单选按钮很少单独使用,对单选按钮分组时有两种方式,如下所示。

(1)先向页中添加单个RadioButton控件,然后将所有这些控件手动分配到一个组中。

(2)向页中添加RadioButtonList控件,该控件中的列表将自动分组。

3.4.3 CheckBox控件

CheckBox控件也叫复选框,它在Web窗体页面上显示为一个可选的方块,常用于为用户提供多项选择。

CheckBox控件与RadioButton控件功能类似,不同的是,RadioButton控件显示为圆圈可选框,而CheckBox控件显示为方形可选框,其在工具箱中的符号为。CheckBox控件的一般形式如下。

        <asp:CheckBox ID="控件名称" runat="server" AutoPostBack="true | false"
        Checked="true  |  false"  Text=" 控 件 文 字 "  TextAlign="left  |  right"
        OnCheckedChanged="事件程序名称" />

从语法形式中可以看出,除了ID和runat属性外,CheckBox控件最常用的有4个属性和一个事件。属性的说明如下。

(1)AutoPostBack:默认值为false,设置当使用者选择不同的项目时,是否自动触发CheckedChanged事件。

(2)Checked:该属性传回或设置是否该项目被选取。

(3)TextAlign:该属性设置控件所显示的文字是在按钮的左方还是右方。

(4)Text:该属性设置CheckBox控件所显示的文本内容。

单个CheckBox控件在用户单击该控件时会引发CheckedChanged事件,但是由于AutoPostBack属性的值为false,因此在默认情况下,该事件并不导致向服务器发送页面。通过Checked属性,可获取该控件是否为选中状态。

3.4.4 CheckBoxList控件

与RadioButtonList控件和RadioButton控件之间的关系一样,CheckBox控件也有着用于多项选择的CheckBoxList控件,其在工具箱中的符号为

CheckBoxList控件与RadioButtonList不同,RadioButtonList中只能有一个选项被选中,而CheckBoxList支持同时选中多个选项。如网购大衣的人对大衣的材质要求不高,可以是棉的也可以是羊毛的或羊绒的,那么该客户在选择大衣的时候可同时在材质一栏选择棉、羊毛和羊绒这三个选项。

如果想用数据库中的数据创建一组复选框,那么CheckBoxList控件是很好的选择。CheckBoxList控件也可以动态地绑定数据源,其常用属性如表3-6所示。

表3-6 CheckBoxList控件的常用属性

CheckBoxList控件与CheckBox控件在事件处理方面也有不同,CheckBoxList控件在选项改变时会引发SelectedIndexChanged事件。默认情况下,该事件并不导致向服务器发送窗体,但是可以通过AutoPostBack属性的值来控制。

由于CheckBoxList控件可同时选择多个选项,因此不能像RadioButtonList控件一样获取选中值,而是需要遍历其所有选项,以获取哪些选项被选中。

【范例2】

结合本节内容,创建学生参加校园活动的统计表,要求学生填写姓名,选择性别和所参加的校园活动。

由于学生的性别是男和女这两个互斥选项,因此可以使用RadioButtonList控件;由于一名学生可以同时参与多个校园活动,因此可以使用CheckBoxList控件,步骤如下。

(1)省略页面的部分代码,页面中需要有填写学生姓名的文本框、有供学生选择性别的单选框和供学生选择参与活动的复选框,还有【提交】按钮和信息显示标签,这些控件的页面代码如下。

        <asp:TextBox ID="nameBox" runat="server"></asp:TextBox></td>
        <asp:RadioButtonList ID="Sex" runat="server" RepeatDirection=
        "Horizontal" Width="120px">
            <asp:ListItem Selected="True">男</asp:ListItem>
            <asp:ListItem>女</asp:ListItem>
        </asp:RadioButtonList>
        <asp:CheckBoxList ID="sleeveA" runat="server" RepeatDirection=
        "Horizontal"
            Width="492px">
            <asp:ListItem Selected="True">体育项目</asp:ListItem>
            <asp:ListItem>舞蹈</asp:ListItem>
            <asp:ListItem>武术</asp:ListItem>
            <asp:ListItem>音乐</asp:ListItem>
            <asp:ListItem>计算机软件</asp:ListItem>
            <asp:ListItem>计算机硬件</asp:ListItem>
        </asp:CheckBoxList>
        <asp:Button ID="Submit" runat="server" Text="提交" BackColor="#FFFFCC"
        BorderColor="#FFD800" BorderStyle="Outset" Height="24px" Width="103px"
        OnClick="Submit_Click" /></td>
        <asp:Label ID="message" runat="server" Text=""></asp:Label></td>

(2)为【提交】按钮添加鼠标单击事件,获取学生的信息并显示在页面上,代码如下。

        protected void Submit_Click(object sender, EventArgs e)
        {
            if (nameBox.Text == "")
            {
              message.Text = "姓名不能为空";
              message.ForeColor = System.Drawing.Color.Red;
            }
            else
            {
              string sname = nameBox.Text;
              string ssex = Sex.SelectedValue;
              string active = "";
              foreach (ListItem item in sleeveA.Items)     //遍历复选框
              {
                  if (item.Selected)                       //判断选项是否被选中
                  { active += item.Value + "、"; }
              }
              message.Text = "姓名:" + sname+ " 性别:"+ ssex + "<br/>"+"爱好:"
              +active;
          }
      }

(3)运行该页面,在没有任何输入的情况下单击【提交】按钮,其效果如图3-3所示。由于用户没有输入姓名,因此有红色字体的提示语句,没有读取用户的输入信息。

图3-3 单选框和复选框的应用

(4)向页面中输入数据并单击【提交】按钮,其效果如图3-4所示。在提交之后获取了用户的输入信息,并成功赋值给名为message的标签控件来显示。由于图3-4是在图3-3的基础上重新提交,因此字体显示为红色;若是直接在填写完整的情况下提交的,字体显示为黑色。

图3-4 单选框和复选框的数据获取