第二章 用Web伺服器控制元件建立表單

weixin_34219944發表於2009-03-12
 

第二章 用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

 

相關文章