細(xì)細(xì)品味ASP.NET(4)
發(fā)表時(shí)間:2024-02-11 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]Web 控件 你可能會(huì)擔(dān)心,象 <asp:TextBox>這樣的 控件 代表了一套需要你熟練運(yùn)用的全新 控件 。不過(guò),它們并不難學(xué),因?yàn)樗鼈冊(cè)贖TML中都有對(duì)應(yīng)者。例如,對(duì)于一個(gè)很簡(jiǎn)單的文本框,在HTML 中,你是這樣做的: <input type=“text” value=...
Web 控件
你可能會(huì)擔(dān)心,象 <asp:TextBox>這樣的 控件 代表了一套需要你熟練運(yùn)用的全新 控件 。不過(guò),它們并不難學(xué),因?yàn)樗鼈冊(cè)贖TML中都有對(duì)應(yīng)者。例如,對(duì)于一個(gè)很簡(jiǎn)單的文本框,在HTML 中,你是這樣做的:
<input type=“text” value=“Your Name”></input>
而相應(yīng)的Web 控件 是這樣的:
<asp:TextBox Text=“Your Name” runat=“server” />
在這兩者中,你立刻就能注意到的是Web 控件 通過(guò)代碼“asp:”名稱(chēng)空間來(lái)識(shí)別,并且同在 XML 中一樣,使用斜線來(lái)結(jié)束元素。你不是必須使用 XML 的格式,你也可以使用HTML格式,用一個(gè)分號(hào)來(lái)結(jié)束標(biāo)記:</asp:TextBox>。但是你會(huì)發(fā)現(xiàn), XML 格式被用在許多代碼舉例中,并且代碼字?jǐn)?shù)也較簡(jiǎn)潔。名稱(chēng)空間必須要使用,它負(fù)責(zé)識(shí)別文本框TextBox 控件 來(lái)自哪里。所有的標(biāo)準(zhǔn)Web 控件 都是 ASP名稱(chēng)空間的一部分。當(dāng)編寫(xiě)自己的 控件 時(shí),這一點(diǎn)變得很重要。
TextBox 控件 相對(duì)于標(biāo)準(zhǔn)的輸入框好象沒(méi)有多少優(yōu)勢(shì),但是你應(yīng)該考慮一下面的三個(gè)輸入 控件 :
<input type=“text” ...>
<input type=“password” ...>
<textarea rows=“5" ...>
它們都是用于HTML輸入的,但是并沒(méi)有一致性。但是如果使用下面的,是不是更簡(jiǎn)單一些呢?
<asp:TextBox runat=“server” ...>
<asp:TextBox TextBoxMode=“Password” ...>
<asp:TextBox Rows=“5" ...>
你可以看到,一個(gè)簡(jiǎn)單 控件 包含了HTML中三個(gè) 控件 的功能,而且更易記憶、更易編碼。
ASP.NET 攜帶了5大類(lèi) Web 控件 :
• 與HTML相對(duì)應(yīng)的固有 控件
• 在頁(yè)面上提供數(shù)據(jù)流的列表 控件
•提供更豐富的UI(用戶(hù)界面)內(nèi)容和功能的Rich 控件
• 完成各種表單驗(yàn)證的確認(rèn) 控件
• 為 WAP設(shè)備封裝WML的移動(dòng) 控件
固有的 服務(wù)器 控件 與 HTML 控件 相同,但是更加合理了,可提供更為一致的用途。這些 控件 包括LinkButton(鏈接按鈕)、ImageButton(圖象按鈕)、HyperLink(超級(jí)鏈接)、TextBox(文本框)、CheckBox(復(fù)選框)、RadioButton(單選框)、DropDownList(下拉列表)、ListBox(列表框)、Image(圖象)、Label(標(biāo)簽)、Panel(面板)、Table(表格)、TableRow(表格行)、TableCell(表格單元)。
列表 控件 包括Repeater(轉(zhuǎn)發(fā)器)、DataList(數(shù)據(jù)列表)和DataGrid(數(shù)據(jù)柵格)。列表 控件 還包括RadioButtonList(單選框列表)和 CheckBoxList(復(fù)選框列表),這樣就使創(chuàng)建單選框和復(fù)選框的列表變得簡(jiǎn)單。
Rich 控件 包括Calendar(日歷)和AdRotator(廣告旋轉(zhuǎn))。Calendar 控件 為低級(jí)的瀏覽器輸出純HTML,為高級(jí)瀏覽器輸出 DHTML (如 Internet Explorer 5.0)。AdRotator輸出圖象,它有內(nèi)置的旋轉(zhuǎn)代碼。
確認(rèn) 控件 包括RequiredFieldValidator(請(qǐng)求域確認(rèn))、 Compare Validator(比較確認(rèn))、RangeValidator(范圍確認(rèn))、RegularExpressionValidator(規(guī)范表達(dá)確認(rèn))、CustomValidator(顧客確認(rèn))和ValidationSummary(確認(rèn)摘要)。這些 控件 為開(kāi)發(fā)人員在表單處理中建立確認(rèn)提供了簡(jiǎn)單的途徑。
有關(guān)移動(dòng) 控件 的信息現(xiàn)在還沒(méi)有發(fā)布,但是可以肯定它們有助于構(gòu)造激活WAP的Web站點(diǎn)。
編寫(xiě)新的 控件
你并不一定只局限于使用這些系統(tǒng)提供的 控件 ,自己編寫(xiě) 控件 也相當(dāng)簡(jiǎn)單。例如,如果想要一個(gè) 控件 來(lái)封裝兩個(gè)文本框(可能是名和姓的輸入域),就可以這樣來(lái)編寫(xiě)代碼:
<asp:Panel runat=“server”>
<asp:Textbox id=“txtFirstName” text=“First Name” runat=“server” />
<asp:Textbox id=“txtLastName” text=“Last Name” runat=“server” />
</asp:Panel>
可以把這個(gè)代碼保存在文件 Name.aspc (注意這個(gè)新擴(kuò)展名)中,并將其作為一個(gè)Web表單 控件 來(lái)對(duì)待。接著,就可以向 Web表單中增加以下內(nèi)容:
<%@ Register TagName=“NameControl” TagPrefix=“Foo” Src=“Name.aspc” %>
<form>
<foo:NameControl runat=“Server”/>
</form>
這樣你就可以很容易地創(chuàng)建可以再利用的 控件 了。這真實(shí)很美好 ;-) 你還可以直接在Visual Basic或 C#中創(chuàng)建 控件 ,允許它們成為其它 控件 的子類(lèi),并且呈現(xiàn)任何它們所要求的輸出。因?yàn)?控件 是用名稱(chēng)空間來(lái)識(shí)別的,因此在 控件 之間應(yīng)該是沒(méi)有沖突的。實(shí)際上, 控件 甚至可以使用同一個(gè)名字,只要它們?cè)诓煌拿Q(chēng)空間中就行。你會(huì)感覺(jué)到,這使得 ASP.NET 非常具有擴(kuò)展性,并且使編程環(huán)境變得越來(lái)越豐富。實(shí)際上有一個(gè)很大的提供豐富 控件 的第三方市場(chǎng)。
數(shù)據(jù)捆綁 控件
新的Web 控件 之一是數(shù)據(jù)柵格DataGrid,這是用于顯示成套數(shù)據(jù)的內(nèi)置支持 控件 。為了從SQL生成的數(shù)據(jù)中產(chǎn)生一個(gè) HTML表格,你只需要?jiǎng)?chuàng)建 ADO+對(duì)象,并執(zhí)行指令來(lái)獲取數(shù)據(jù)以作為柵格的數(shù)據(jù)源,比如下面的表4代碼:
表 4 DaveSGrid1.aspx
<%@ Import Namespace=“System.Data.SQL” %>
<html>
<script language=“VB” runat=“server”>
Sub Page_Load(Sender As Object, E As EventArgs)
Dim myCommand As SQLCommand
myCommand = New SQLCommand(Òselect * from products”,
ÒServer=localhost; Database=AdvWorks; UID=sa”)
DataGrid1.DataSource = myCommand.Execute
DataGrid1.DataBind
End Sub
</script>
<body>
<ASP:DataGrid id=“DataGrid1" runat=“server” />
</body>
</html>
所需要做的就是將數(shù)據(jù)捆綁到數(shù)據(jù)柵格,然后就生成了一個(gè)整潔的HTML表格:
數(shù)據(jù)捆綁并不局限于來(lái)自 數(shù)據(jù)庫(kù) 的數(shù)據(jù),你還可以捆綁到hash表格、數(shù)組、其它 服務(wù)器 控件 、頁(yè)面的適當(dāng)層,幾乎什么都可以。如果默認(rèn)的欄目不合適,還可以對(duì)其進(jìn)行定制,讓其顯示你所感興趣的部分:
<asp:DataGrid id=“DataGrid1"
AutoGenerateColumns=“false” runat=“server”>
<property name=“Columns”>
<asp:BoundColumn HeaderText=“ Name” DataField=“ProductName”/>
<asp:BoundColumn HeaderText=“Description”
DataField=“ProductDescription”/>
</property>
</asp:DataGrid>
使用 BoundColumn 控件 選擇一個(gè)簡(jiǎn)單的欄目,并指定欄的標(biāo)題和這欄要捆綁到哪里。 AutoGenerate=“false” 屬性負(fù)責(zé)確保柵格不會(huì)為你創(chuàng)建所有的欄目。如果想更復(fù)雜一些,也可以為這個(gè)欄目使用一個(gè)模板。
此前提到的Repeater和DataList 控件 也支持模板,這樣就允許對(duì) 控件 的外觀進(jìn)行定制。Repeater實(shí)際上并沒(méi)有外觀,你必須要提供 UI,這就意味著必須要使用一個(gè)模板。相反,DataList 控件 是一個(gè)捆綁到數(shù)據(jù)的列表,有一個(gè)默認(rèn)的外觀和豐富的行為。為這兩個(gè) 控件 添加模板的方法是一樣的:
<asp:DataList is=“DataList1" runat=“server”>
<template name=“HeaderTemplate”>
Here”s your list of titles<br>
</template>
<template name=“ItemTemplate”>
<%# DataBinder.Eval(Container.DataItem, “Title”) %> <br>
</template>
</asp:DataList>
有了這個(gè)模板template,你就可以指定用哪些 HTML 控件 來(lái)組成數(shù)據(jù)捆綁 控件 的每一部分。有5個(gè)模板的名字可以與 DataList 控件 一起使用:HeaderTemplate用于 控件 的最頂端部分,ItemTemplate 用于各個(gè)項(xiàng)目,Alternating-Item-Template用于其它項(xiàng)目,SeparatorTemplate用于各個(gè)項(xiàng)目之間的區(qū)域,F(xiàn)ooterTemplate用于 控件 的底部。
這個(gè)系統(tǒng)的好處在于:對(duì)于如何顯示界面,有大量的 控件 可以使用。進(jìn)一步使用產(chǎn)品列表,你就能用表7中的代碼來(lái)生成下圖所示的輸出:
表 7 DaveSGrid2.aspx
<asp:DataList id=“MyDataList” RepeatColumns=“2" runat=“server”>
<template name=“itemtemplate”>
<table cellpadding=10 style=“font: 10pt verdana”>
<tr>
<td width=1 bgcolor=“BD8672"/>
<td valign=“top”>
<img align=“top”
src=“<%# DataBinder.Eval(Container.DataItem,“ProductImageURL”) %>“ >
</td>
<td valign=“top”>
<b>Name: </b>
<%# DataBinder.Eval(Container.DataItem,”P(pán)roductName”) %><br>
<b>Description: </b>
<%# DataBinder.Eval(Container.DataItem,“ProductDescription”) %><br>
<b>Price: </b>
<%# DataBinder.Eval(Container.DataItem,”P(pán)roductPrice”, “$ {0}”) %>
</td>
</tr>
</table>
</template>
</asp:DataList>
這個(gè)代碼相當(dāng)簡(jiǎn)單,除了前面顯示的 DataList代碼外,不再需要更多的東西。代碼里有一點(diǎn)值得注意,就是你可以規(guī)定出現(xiàn)的欄數(shù),列表會(huì)自動(dòng)處理欄的包裝。這樣就只需要一點(diǎn)格式化代碼,Web頁(yè)面就得到了極大的改進(jìn),而不再使用以前Web 頁(yè)面上的傳統(tǒng)柵格。