第二章 用Web服务器控件建立表单

 

第二章 用Web服务器控件建立表单

主要内容

建立智能表单

控制页面导航

在控件上进行格式化

1       建立智能表单

1.1      Label控件

重要属性是Text。

给Text属性赋值,你可以:第一、声明时赋值;第二、代码中赋值。

Label控件的内容被显示在<span>标记内(可以用浏览器查看源码)。

1.2      TextBox控件

可以用来显示三种HTML标记。分别是:文本输入域、口令输入域和文本区域。

重要的属性有:

AutoPostBack 若为True,改变文本框的内容之后,将自动发送含有此文本框的表单

Columns

MaxLength

ReadOnly

Rows

Text

TextMode 有效值有三个:

MultiLine

Password

SingleLine

Wrap

重要的事件

OnTextChanged

 

关于“TextMode属性”的三个值???

SingleLine     这是默认值,一般单行输入文本域。

Password       显示口令输入域

MultiLine      文本区域TextArea

 

1.3      Button控件

可以在表单中添加的Button控件有三种(不论哪种按钮,点击时都是【将包含按钮的表单提交给Web服务器】):

Button     标准HTML表单按钮

默认情况下,它显示的是提交按钮。(即为<input type=submit>标记)

重要属性有:

Text

CommandName

CommandArgument

CausesValidation       设置表单是否被检验。默认为true。

重要事件:

Click

Command

ImageButton       图像表单按钮

重要属性(只列出与Button不同的):

AlternativeText         当不能显示图像时,需要显示的文本

ImageAlign         对齐方式,取值为:AbsBottom、AbsMiddle、BaseLine、Bottom、Left、Middle、NotSet、Right、TextTop和Top

ImageURL          图像的URL

重要事件(同Button控件)

注意:ImageButton控件的Click事件,其事件参数对象的类型为ImageClickEventArgs,它能够传递鼠标点击位置的x和y坐标

LinkButton         超文本链接

显示为超文本链接,点击时,将含有此按钮的表单中的所有域都提交给服务器。

LinkButton控件在不支持JavaScript的浏览器中不起作用(禁用也算)。

 

1.4      RadioButton和RadioButtonList控件

RadioButton可以很方便的改变布局;

而RadioButtonList便于显示来自数据库或集合的按钮列表。

 

1.4.1 RadioButton控件

添加控件时,设置GroupName属性,可以对按钮进行分组。(同GroupName的按钮属于同组)

而CheckedChanged事件则可以用来判断哪个按钮被选中了。(此事件发生时机为【新的控件被选中时】,相对的若默认按钮被选中时直接提交表单,不会触发此事件)

RadioButton控件也支持AutoPostBack属性。

1.4.2 RadioButtonList

跟布局有关属性:

CellPadding

边框宽度(单位像素数)

CellSpacing

各按钮间距

RepeatColumns

显示时列数

RepeatDirection

方向。取值Horizontal和Vertical(默认)

RepeatLayout

布局。取值Table(默认)和Flow

数据库有关属性

DataSource

 

DataTextField

指定字段

DataTextFormatString

 

DataValueField

作为【单选按钮的值】的数据库字段

DataMember

数据源表

一般属性

Items

SelectedIndex

SelectedItem

方法

DataBind

事件

SelectedIndexChanged

 

产生RadioButtonList控件的三种方法:

第一,声明时列出单选按钮

<asp:RadioButtonList ID=radlFavoriteColor Runat=Server>

<asp:ListItem Text=红色/>

<asp:ListItem Text=蓝色 Selected=True/>

<asp:ListItem Text=黄色 />

</asp:RadioButtonList>

第二,将条目添加到RadioButtonList类的ListItemCollection集合

<%@ Page Language="VB" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<script runat="server">

    Protected Sub page_load(ByVal s As Object, ByVal e As EventArgs)

        If Not IsPostBack Then

            radl1.Items.Add("红色的")

            radl1.Items.Add("绿色")

            radl1.Items.Add("蓝色")

            radl1.SelectedIndex = 2

        End If

    End Sub

</script>

 

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>无标题页</title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

    <asp:RadioButtonList ID="radl1" runat="server"></asp:RadioButtonList>

    </div>

    </form>

</body>

</html>

第三,绑定到一个数据源

<%@ Page Language="VB" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<script runat="server">

    Sub page_load()

        '定义一个数据源,可以用ArrayList代替

        Dim colss As New ArrayList

        If Not IsPostBack Then '

            colss.Add("一种颜色")

            colss.Add("两种颜色")

            colss.Add("三种颜色")

            colss.Add("第五种")

            '下面开始绑定数据源

            radl2.DataSource = colss

            radl2.DataBind()

        End If

    End Sub

</script>

 

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>无标题页</title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

    <asp:RadioButtonList ID="radl2" runat="server" />

    </div>

    </form>

</body>

</html>

注意:ArrayList是一个集合,可以把它看做没有固定尺寸的数组。

另外,在将RadioButtonList绑定到数据源时,还可以使用其DataTextFormatString属性对每个选项的文本进行格式化。
<asp:RadioButtonList ID="radl2" DataTextFormatString="这种颜色叫:{0}" runat="server" />

 

如何判断【当前选中的按钮】?

使用SelectedIndex属性,返回当前选中按钮的索引号。(注意第一项的索引号为0)

或者,利用SelectedItem属性,返回条目。(返回值类型ListItem)

 

如何【控制布局】?

使用RepeatDirection属性,若为Vertical,表示按钮先纵向,再到下一列显示;若为Horizontal,则先横向,再到下一行。

 

如果,启动了RadioButtonList控件的AutoPostBack属性,当【选择新的单选按钮时】会引发SelectedIndexChanged事件。

1.5      CheckBox和CheckBoxList复选框

CheckBox控件

特殊属性:Checked。(为True表示被选中)

事件:CheckedChanged

CheckBoxList控件

1.6      DropDown控件

包含一个ListItemCollection集合类型的属性Items。

1.7      ListBox控件

特殊属性:

Rows       表示显示的行的个数。默认为4

SelectionMode          决定是否能多选。可能值为Multipe和Single。

 

 

2       控制页面导航

内容:

如何将HTML表单提交到另一个页面,并且获取表单信息。

如何使用Redirect方法自动将用户送到新页面

如何用HyperLink控件将页面链接起来。

2.1      将表单提交到另一个页面

使用<form>标记的服务器端版本,不能将表单发送到另一个页面。

 

若要“将表单提交到另一个页面”,可以使用标准HTML表单标记。

<%@ Page Language="VB" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<script runat="server">

 

</script>

 

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>无标题页</title>

</head>

<body>

    <form id="form1" method="post" action="Results.aspx"><%--首先修改这里--%>

    <div>

    username:<br />

    <input name="username" /> <%--注意这里没有使用ASP.NET控件--%>

    <p>

    </p>

    Comments:<br />

    <textarea name ="comments" cols="50" rows="10"></textarea><%--注意这里没有使用ASP.NET控件--%>   

    <p></p>

    <input type="submit" ><%--注意这里没有使用ASP.NET控件--%>

   

    </div>

    </form>

</body>

</html>

注意:<form method="post" action="Results.aspx">。标记的Action属性被设置为新页面Results.aspx,这是表单信息会被发送的地方。

注意:因为表单被发送到另一个页面,你不能使用ASP.NET控件获取此信息。

『你可以使用HTTPRequest类的Params集合来操作』

注意:你还可以使用HTTPRequest类的Form集合获取表单数据。

Params和Form集合的差异???

Rarams集合还代表了QueryStrings、ServerVaribles和Cookies。

 

    'page_Load中获取内容

    Sub page_load()

        lblUserName.Text = Request.Params("Username")

        lblComments.Text = Request.Params("Comments")

    End Sub

 

2.2      使用Redirect()方法

在大多数情况下,应该利用视图状态,并且将表单发送回其本身。

问题是:在用户成功地填写表单之后,如何将他传送到新的页面?

传送用户的最好办法是使用Response.Redirect()方法。(可以传送到任何页面或别的网站页面上)

通常,在调用Redirect()方法之前,会将表单数据保存到文件或数据库表中。

 

<%@ Page Language="VB" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<script runat="server">

    Protected Sub btnSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs)

        '在这里,先保存表单信息,这里掠过

        Response.Redirect("ThankYou.aspx")

    End Sub

</script>

 

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>Redirect.aspx</title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

    <h1>先加控件</h1>

    <br />

    Username:<br />

    <asp:TextBox ID="txtUsername" runat ="server" />

    <p />

    Comments:<br />

    <asp:TextBox ID="txtComments" TextMode="multiLine" runat="server" />

    <p />

    <asp:Button ID="btnSubmit" Text="Submit!" runat="server" OnClick="btnSubmit_Click" />

    </div>

    </form>

</body>

</html>

2.3      使用HyperLink控件

如果使用HyperLink控件,可以将一个asp.net页面链接到另一个页面。

HyperLink控件,可以显示文本或者图像,作为显示。

 

重要属性:

ImageUrl

显示用图像的URL

NavigateUrl

目标页面的URL

Target

链接的目标窗口或框架,可以是:_top、_self、_parent、_search、_blank。

Text

链接的文本标签

 

HyperLink控件相对于简单的HTML链接(即<a href />)的优点????

就是可以在代码中操作它的属性。

 

<script runat="server">

    Sub page_load()

        If TimeOfDay > #5:00:00 PM# Then

            lnkHelpLink.NavigateUrl = "AfterHoursHelp.aspx"

            lnkHelpLink.Text = "After Hours Help"

        Else

            lnkHelpLink.NavigateUrl = "NormalHelp.aspx"

            lnkHelpLink.Text = "Normal help"

        End If

    End Sub

</script>

 

3       在控件上进行格式化

主要内容:

第一.所有web控件共有的格式化属性

第二.应用“级联样式表(CSS)”

第三.应用“类”到Web控件

3.1      基本Web控件属性

所有Web控件的基类是WebControl。

 

在WebControl类中定义的【基本Web控件格式化属性简表】

AccessKey

选择控件用的热键。需要按住ALT再加某字母

TabIndex

 

BackColor

背景色。可以是名称或RGB值(#FF0000)

BorderStyle

边框外观。有效值:Dashed、Dotted、Double、Groove、Inset、None、NotSet、Outset、Ridge、Solid。

BorderWidth

控件边框宽度(单位像素)

Font-Bold

 

Font-Italic

 

Font-Name

 

Font-Names

 

Font-Overline

文本上面划线

Font-Size

单位像素

Font-Strikeout

删除线

Font-UnderLine

 

ForeColor

 

Height

 

ToolTip

 

Width

 

注意,一些属性需要IE浏览器支持,还有一些需要依赖于样式表。

 

FontUnit 类型(表示字体的大小)

其中:公开方法

Parse

已重载。 将指定的字符串转换为其 FontUnit 等效项。

txt1.Font.Size = FontUnit.Parse(ddlFontSize.SelectedItem.Text)

 

Color结构(在System.Drawing名称空间)

其公开方法

FromName

基于预定义颜色的指定名称创建 Color 结构。

Dim strBackColor As Color = Color.FromName(ddlBackColor.SelectedItem.Text)

 

3.2      在Web控件上应用样式表

 

举例:将字符串中每个单词的各字母自动变成大写,可以通过在Label控件的Style属性中设置Text-Transform=Capitalize.

<asp:Label

ID=lbl1

Style=Text-Transform:Capitalize

Text=this is some Text

Runat=Server/>

浏览器中观察源码,会产生一个包含Style属性的<span>标记,如下:

<span id=lbl1 style=Text-Transform:Capitalize>this is some Text</span>

 

上面的效果,也可以使用CssClass属性(将一个样式单类赋值给Web控件)来实现。

 

样式单可以定义在页面文件内部。(通过指定控件的CssClass属性。注意此属性值的大小写)

<%@ Page Language="VB" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<script runat="server">

 

</script>

 

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>无标题页</title>

    <%--首先,加入css,添加<style>标记--%>

    <style type="text/css" >

    .myClass

    {

    text-align:justify;

    font:50pt Script;

    }

    </style>

</head>

<body>

    <form id="form1" runat="server">

    <div>

    <%--这里是第二步--%>

    <asp:Label ID="lbl1" Width="10" CssClass="myClass" Text="this is some text" runat="server" /><%--注意CssClass="myClass",大小写不一样--%>

    </div>

    </form>

</body>

</html>

 

还可以通过代码添加样式(通过使用控件style属性【由WebControl继承而来】,来指定文字样式)

<%@ Page Language="VB" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<script runat="server">  

    Protected Sub lbtn1_Click(ByVal sender As Object, ByVal e As System.EventArgs)

        '第二步,通过IDE,增加LinkButtonClick事件

        lbl1.Style("text-transform") = "capitalize"

    End Sub

 

    Protected Sub lbtn2_Click(ByVal sender As Object, ByVal e As System.EventArgs)

        lbl1.Style("text-transform") = "lowercase"

    End Sub

</script>

 

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>无标题页</title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

    <%--第一步,添加控件LinkButton--%>

    <asp:Label ID="lbl1" Text="This is some text!" runat="server" /><p />

    <asp:LinkButton ID="lbtn1" Text="首字母大写" runat="server" OnClick="lbtn1_Click" /><br />

    <asp:LinkButton ID="lbtn2" Text="全部小写" runat="server" OnClick="lbtn2_Click" />  

    </div>

    </form>

</body>

</html>

 

下面演示“通过控件的CssClass属性,给控件分配不同的样式单类。”

有两个样式单类myClass1和myClass2,用按钮控制分别赋给一个Label

<%@ Page Language="VB" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<script runat="server">

    Protected Sub LinkButton1_Click(ByVal sender As Object, ByVal e As System.EventArgs)

        '第二步,给LinkButton增加事件'

        Label1.CssClass = "myclass1"

    End Sub

 

    Protected Sub LinkButton2_Click(ByVal sender As Object, ByVal e As System.EventArgs)

        Label1.CssClass = "myclass2"

    End Sub

</script>

 

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>无标题页</title>

   

    <%--第一步,定义样式单类--%><%--注意位置在<head>标记里--%>

    <style>

        .myclass1

        {

            font:72pt 方正粗活意简体;

            color: blue;

        }

        .myclass2

        {

            font:36pt 方正粗活意繁体;

            color:red;

        }

    </style>

</head>

<body>

    <form id="form1" runat="server">

    <div>

        <asp:Label ID="Label1" runat="server" Text="Here is some text! 这有一些文字!"></asp:Label><br />

        <br />

        <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">指定为 myclass1</asp:LinkButton><br />

        <asp:LinkButton ID="LinkButton2" runat="server" OnClick="LinkButton2_Click">指定为 myclass2</asp:LinkButton>&nbsp;</div>

    </form>

</body>

</html>

 

关于Style类

(前面学的是将样式单应用到控件上)

还可以通过Style类来支持服务器端样式。(即,显示创建Style类的实例,并将它应用于多个控件)

<%@ Page Language="VB" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<%@ import Namespace="system.Drawing" %>

<script runat="server">

 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)

        '先建立Style类示例'

        Dim myStyle As New Style '

        myStyle.BackColor = Color.Yellow

        myStyle.ForeColor = Color.Green

        myStyle.BorderStyle = BorderStyle.Dashed

        myStyle.BorderWidth = New Unit(4) 'Unit表示长度度量单位'

        TextBox1.ApplyStyle(myStyle)

        TextBox2.ApplyStyle(myStyle)

        TextBox3.ApplyStyle(myStyle)

       

        myStyle.BackColor = Color.Aqua

        myStyle.ForeColor = Color.DarkGoldenrod

        Button1.ApplyStyle(myStyle)

        Button2.ApplyStyle(myStyle)

       

        myStyle.BorderStyle = BorderStyle.Groove

        myStyle.BorderWidth = New Unit(1)

        LinkButton1.ApplyStyle(myStyle)

        LinkButton2.ApplyStyle(myStyle)

       

        myStyle.Font.Name = "hakuyocaoshu7000"

        myStyle.Font.Size = 73

        HyperLink1.ApplyStyle(myStyle)

    End Sub

</script>

 

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>无标题页</title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

        <asp:TextBox ID="TextBox1" runat="server">opaoopampgoaasdg</asp:TextBox><br />

        <asp:TextBox ID="TextBox2" runat="server">白日依山尽</asp:TextBox><br />

        <asp:TextBox ID="TextBox3" runat="server">黄河如海浪Rive Drive hair</asp:TextBox><br />

        <p />

        <asp:Button ID="Button1" runat="server" Text="Button" /><br />

        <asp:Button ID="Button2" runat="server" Text="Button" /><br />

        <p />

        <asp:LinkButton ID="LinkButton1" runat="server">LinkButton</asp:LinkButton><br />

        <asp:LinkButton ID="LinkButton2" runat="server">LinkButton</asp:LinkButton><br />

        <p />

        <asp:HyperLink ID="HyperLink1" runat="server">HyperLink</asp:HyperLink></div>

    </form>

</body>

</html>

 

注意:ApplyStyle()方法,是将Style类应用于WebControl;还有一个MergeStyle()方法,是将样式合并到WebControl

 

posted @ 2009-03-12 10:40  怒杀神  阅读(618)  评论(0编辑  收藏  举报