




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
伺服器控制項(xiàng)一第1頁/共198頁2大綱6.1 控制項(xiàng)簡介6.1.1 Web伺服器控制項(xiàng)的種類6.1.2 Web伺服器控制項(xiàng)的共通屬性6.2 文字輸出控制項(xiàng)6.2.1 Label控制項(xiàng)6.2.2 Literal控制項(xiàng)6.3 HiddenField隱藏資訊控制項(xiàng)6.4 文字輸入控制項(xiàng)6.4.1 TextBox控制項(xiàng)6.4.2 讀取網(wǎng)頁與PostBack6.4.3 AutoPostBack屬性6.5 傳送控制項(xiàng)6.5.1 Button控制項(xiàng)6.5.2 ImageButton控制項(xiàng)6.5.3 LinkButton控制項(xiàng)第2頁/共198頁3大綱6.6 選擇控制項(xiàng)6.6.1 CheckBox多選控制項(xiàng)6.6.2 CheckBoxList多選清單控制項(xiàng)6.6.3 RadioButton選項(xiàng)按鈕(單選)控制項(xiàng)6.6.4 RadioButtonList選項(xiàng)按鈕(單選)清單控制項(xiàng)6.6.5 ListBox控制項(xiàng)6.6.6 DropDownList控制項(xiàng)6.7 多控制項(xiàng)的管理6.7.1 控制項(xiàng)順序與快速切換6.7.2 容器與Panel面板控制項(xiàng)6.8 本章回顧第3頁/共198頁4在本章中,我們將介紹常用的Web伺服器控制項(xiàng),並介紹何謂PostBack,以及如何應(yīng)用面板(Panel)來管理眾多控制項(xiàng)。第六章
伺服器控制項(xiàng)(一)第4頁/共198頁56.1 控制項(xiàng)簡介VWD的工具箱中提供的元件稱之為控制項(xiàng)(Control),其完整名稱為伺服器控制項(xiàng)(servercontrol),伺服器控制項(xiàng)在原始碼中,同樣以標(biāo)籤型式出現(xiàn),但伺服器端的編譯器能夠理解並處理這些標(biāo)籤。除了自訂的控制項(xiàng)之外,ASP.NET提供的伺服器控制項(xiàng)可以分為兩大類:1.HTML伺服器控制項(xiàng)(HTMLServerControls):HTML伺服器控制項(xiàng)是由HTML標(biāo)籤衍生而來,您可以先在工具箱的HTML頁籤中選取HTML元件,這些HTML元件都是由簡單的HTML標(biāo)籤所構(gòu)成當(dāng)您在網(wǎng)頁中加入了HTML元件後,只需要在原始碼頁籤中,將其標(biāo)籤加上runat="server"屬性即可(若無ID或id屬性,則也必須補(bǔ)上,例如Image:HTML伺服器控制項(xiàng))。如下範(fàn)例:第5頁/共198頁6第6頁/共198頁7第7頁/共198頁86.1 控制項(xiàng)簡介經(jīng)由加入runat=“server”屬性的動作後,該HTML元件已經(jīng)變成了HTML伺服器控制項(xiàng)換句話說,它可以被伺服器處理,因此,我們可以在撰寫程式時使用它,而代表該控制項(xiàng)的名稱則為其標(biāo)籤的id屬性值「Text1」例如我們可以在Page_Load程序中,加入下列敘述,使得「HTML伺服器控制項(xiàng):文字方塊」的內(nèi)容初始為「請輸入文字」。ProtectedSubPage_Load(ByValsenderAsObject,ByValeAsSystem.EventArgs)
Text1.Value="請輸入文字"
'並非使用Text屬性EndSub第8頁/共198頁96.1 控制項(xiàng)簡介執(zhí)行後就成為上圖結(jié)果,您可以注意到,我們並非使用Text1.Text來設(shè)定文字方塊的文字,這是因?yàn)樗且粋€HTML伺服器控制項(xiàng)的文字方塊,其類別為HtmlInputText類別,並且隸屬於System.Web.UI.HtmlControls命名空間,它並不是一個Web伺服器控制項(xiàng)。因此當(dāng)您查閱HtmlInputText類別的線上說明時,會發(fā)現(xiàn)設(shè)定方塊中的值,應(yīng)該是以Value屬性來替代,它並沒有Text屬性。如果您回到VWD的介面中,在「HTML伺服器控制項(xiàng):文字方塊」上按兩下,會發(fā)現(xiàn)它出現(xiàn)的事件程序是客戶端的JavaScript函式Text1_onclick(),而非伺服器端的程序?!驹]】以上為產(chǎn)生HTML伺服器控制項(xiàng)的方法,以及如何應(yīng)用HTML伺服器控制項(xiàng),但在本書中,我們將極少使用HTML伺服器控制項(xiàng),因?yàn)樗械腍TML伺服器控制項(xiàng)都可以使用Web伺服器控制項(xiàng)來取代。第9頁/共198頁106.1 控制項(xiàng)簡介2.Web伺服器控制項(xiàng)(WebServerControls):Web伺服器控制項(xiàng)是ASP.NET自己制定的控制項(xiàng),它可以經(jīng)由伺服器編譯器的處理而產(chǎn)生一個以上的HTML標(biāo)籤以及些許JavaScript程式碼以完成控制項(xiàng)的功能我們在前幾章中建立的網(wǎng)頁控制項(xiàng)都是屬於Web伺服器控制項(xiàng)。在原始碼頁籤中,Web伺服器控制項(xiàng)會以ASP.NET自訂的標(biāo)籤格式出現(xiàn),其標(biāo)準(zhǔn)格式如下:所有Web伺服器控制項(xiàng)的所屬類別都位於System.Web.UI.WebControls命名空間中例如System.Web.UI.WebControls.Button類別代表Web伺服器控制項(xiàng)按鈕的類別。<asp:控制項(xiàng)類別ID="控制項(xiàng)名稱"runat="server"/>第10頁/共198頁116.1 控制項(xiàng)簡介而Web伺服器控制項(xiàng)的類別都繼承自System.Web.UI.WebControls.WebControl類別,在此類別中,定義了所有Web伺服器控制項(xiàng)的屬性和方法,而它又繼承自System.Web.UI.Control類別,Control類別則定義了所有伺服器控制項(xiàng)共用的屬性和方法。在工具箱的標(biāo)準(zhǔn)頁籤中,所有的控制項(xiàng)都是Web伺服器控制項(xiàng)。但並非所有的Web伺服器控制項(xiàng)都位於標(biāo)準(zhǔn)頁籤中,有些會位於其他標(biāo)籤中例如驗(yàn)證控制項(xiàng)也是Web伺服器控制項(xiàng),其中範(fàn)圍驗(yàn)證控制項(xiàng)所屬之類別為System.Web.UI.WebControls.RangeValidator類別,同樣位於System.Web.UI.WebControls命名空間中。第11頁/共198頁126.1.1 Web伺服器控制項(xiàng)的種類Web伺服器控制項(xiàng)的種類有很多,並分散於工具箱的各頁籤中,而我們將標(biāo)準(zhǔn)頁籤的各種Web伺服器控制項(xiàng)依照預(yù)設(shè)順序(非字母排序)整理於表6-1中。第12頁/共198頁136.1.1Web伺服器控制項(xiàng)的種類第13頁/共198頁146.1.1Web伺服器控制項(xiàng)的種類第14頁/共198頁156.1.2
Web伺服器控制項(xiàng)的共通屬性所有的Web伺服器控制項(xiàng)都繼承自System.Web.UI.WebControls類別,因此WebControls類別的屬性將會是所有的Web伺服器控制項(xiàng)皆具備的屬性。我們將之整理於表6-2(a)中(但不含定義於WebControls父類別Control的屬性):第15頁/共198頁166.1.2
Web伺服器控制項(xiàng)的共通屬性第16頁/共198頁17第17頁/共198頁186.1.2
Web伺服器控制項(xiàng)的共通屬性至於Web伺服器控制項(xiàng)(WebControls類別)繼承自Control類別的屬性就更多了,因?yàn)镃ontrol類別是所有控制項(xiàng)的基底,因此,我們只將其重要的屬性整理於表6-2(b)。第18頁/共198頁196.2 文字輸出控制項(xiàng)顯示文字的Web伺服器控制項(xiàng)有Label與LiteralLabel控制項(xiàng)可以設(shè)定文字的樣式變化Literal控制項(xiàng)無法設(shè)定文字的樣式變化。6.2.1 Label控制項(xiàng)Label控制項(xiàng)的相關(guān)資訊如下:類別:System.Web.UI.WebControls.Label類別功能:可產(chǎn)生樣式變化的文字標(biāo)籤。輸出的標(biāo)籤:<span>(搭配style屬性設(shè)定CSS),但若設(shè)定AssociatedControlID屬性,則變?yōu)?lt;label>。第19頁/共198頁206.2.1 Label控制項(xiàng)類別重要的新增成員:【AssociatedControlID屬性說明】當(dāng)使用AssociatedControlID屬性將標(biāo)籤控制項(xiàng)與某個控制項(xiàng)產(chǎn)生關(guān)聯(lián)時,標(biāo)籤設(shè)定的快速鍵(AccessKey屬性值)將會變成關(guān)聯(lián)控制項(xiàng)的快速鍵。第20頁/共198頁216.2.1 Label控制項(xiàng)舉例來說,若L1標(biāo)籤控制項(xiàng)的AssociatedControlID屬性設(shè)定為T1文字方塊控制項(xiàng),而L1標(biāo)籤控制項(xiàng)的AccessKey屬性設(shè)定為"W",則在執(zhí)行時,於網(wǎng)頁中按下【Alt】+【W(wǎng)】鍵,游標(biāo)就會自動移到T1文字方塊中。之所以能夠達(dá)到此項(xiàng)功能,是因?yàn)楫?dāng)設(shè)定AssociatedControlID屬性後,標(biāo)籤控制項(xiàng)將被轉(zhuǎn)換為<labelfor="AssociatedControlID屬性值"accesskey屬性="AccessKey屬性">之HTML標(biāo)籤輸出,而非<span>,換句話說,此時Label控制項(xiàng)被當(dāng)作是某個控制項(xiàng)的說明文字。使用範(fàn)例:見範(fàn)例6-1。第21頁/共198頁226.2.2 Literal控制項(xiàng)Literal控制項(xiàng)的相關(guān)資訊如下:類別:System.Web.UI.WebControls.Literal類別功能:直接輸出文字(不可產(chǎn)生樣式變化)。輸出的標(biāo)籤:無。若不更動Mode屬性,則會將Text屬性值直接輸出。第22頁/共198頁236.2.2 Literal控制項(xiàng)類別重要的新增成員:第23頁/共198頁246.2.2 Literal控制項(xiàng)【Mode屬性說明】若Mode設(shè)定為PassThrough,則Text的內(nèi)容不會被修改就輸出。若Mode設(shè)定為Encode,則Text的內(nèi)容會轉(zhuǎn)換成HTML編碼的字串,例如「<」、「>」等都會被更動為「<」、「>」。若Mode設(shè)定為Transform,則Text的內(nèi)容中不支援的標(biāo)籤會被移除(一般使用於非HTML的瀏覽器,例如WML裝置)。使用範(fàn)例:見範(fàn)例6-1、6-2?!竟?fàn)例6-1】設(shè)計(jì)一個網(wǎng)頁,使用某一個Label標(biāo)籤描述某一個文字方塊,並設(shè)定快捷鍵為【Alt】+【N】鍵,按下按鈕後,將輸入的文字使用Literal控制項(xiàng)及Label標(biāo)籤輸出。範(fàn)例6-1:網(wǎng)站目錄ASPNET\ch06\ch06_01\(檔案ch06_01.aspx)第24頁/共198頁256.2.2 Literal控制項(xiàng)Step1:網(wǎng)頁介面設(shè)計(jì)如下(所有控制項(xiàng)皆採相對定位)並設(shè)定屬性(其餘屬性參照屬性窗格)。第25頁/共198頁266.2.2 Literal控制項(xiàng)【註】設(shè)定BackColor與ForeColor等色彩屬性時,除了可以直接輸入數(shù)值外,也可以使用選取方式如下:第26頁/共198頁27事實(shí)上,您也可以直接輸入顏色的英文代碼,例如#0000FF的英文代碼為Blue。要查閱英文代碼,可於線上說明查閱System.Drawing.KnownColor列舉型別。第27頁/共198頁286.2.2 Literal控制項(xiàng)Step2:撰寫B(tài)utton1_Click事件程序碼如下:程式部分內(nèi)容:範(fàn)例說明:僅有兩行敘述,都是連結(jié)字串後設(shè)定為Literal1與Label3的Text屬性。(因?yàn)榇蟛糠謩幼鞫家呀?jīng)在屬性視窗中完成設(shè)定)Step3:執(zhí)行程式。78910ProtectedSubButton1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)Literal1.Text=TextBox1.Text&TextBox2.TextLabel3.Text=TextBox1.Text&TextBox2.TextEndSub第28頁/共198頁296.2.2 Literal控制項(xiàng)Step4:於瀏覽器中執(zhí)行快顯功能表的【檢視原始碼】指令,結(jié)果如下。第29頁/共198頁3012345678910111213141516171819202122…<formname="form1"method="post"action="ch06_01.aspx"id="form1">…<div><spanid="Label1">工作地點(diǎn)</span><inputname="TextBox1"type="text"value="<桃園縣>"id="TextBox1"style="background-color:#FFFF99;"/><br/>
<labelfor="TextBox2"id="Label2"accesskey="N">職業(yè)類別</label>
<inputname="TextBox2"type="text"value="程式設(shè)計(jì)"id="TextBox2"style="color:#0066FF;"/>
<inputtype="submit"name="Button1"value="送出"id="Button1"style="height:21px"/><br/>
<桃園縣>程式設(shè)計(jì)
<br/>
<spanid="Label3"><桃園縣>程式設(shè)計(jì)</span></div></form>…第30頁/共198頁316.2.2 Literal控制項(xiàng)【原始碼說明】(1)所有行號都是為了說明而編號,由於已經(jīng)簡略了許多原始碼,故行號不見得是真實(shí)行號,並且原始碼也經(jīng)過整理。(往後的範(fàn)例也將採用此方式說明)(2)第5行與第9行都是Label控制項(xiàng)的輸出,但由於Label2控制項(xiàng)設(shè)定了AssociatedControlID與AccessKey屬性,故成為<label>標(biāo)籤,可作為說明文字(也就是快速鍵對應(yīng)元件焦點(diǎn))。(3)第16行是Literal1控制項(xiàng)的輸出,由於設(shè)定了Mode屬性為Encode,故字串會經(jīng)過編碼後才輸出,所以<>被編碼為特定字元。而此編碼功能並不會將空白字元進(jìn)行編碼,若有需要,應(yīng)使用範(fàn)例5-2示範(fàn)的Replace自行進(jìn)行替換。(4)這個範(fàn)例不論是否設(shè)定Literal1的Mode屬性,都存在一個問題,您可以試試看在TextBox1中輸入<a>,將會出現(xiàn)潛在危險(xiǎn)警告。此錯誤與驗(yàn)證有關(guān),我們將於第8章介紹。第31頁/共198頁326.2.2 Literal控制項(xiàng)【範(fàn)例6-2】改寫範(fàn)例4-13、5-1,使用不可見的Literal1控制項(xiàng)達(dá)到記錄資料的目的。範(fàn)例6-2:網(wǎng)站目錄ASPNET\ch06\ch06_02\(檔案ch06_02.aspx)Step1:網(wǎng)頁介面設(shè)計(jì)同範(fàn)例5-1,但新增一個不可見的Literal控制項(xiàng)。(所有控制項(xiàng)皆採相對定位、其餘屬性參照屬性窗格)。第32頁/共198頁336.2.2 Literal控制項(xiàng)Step2:撰寫<script>內(nèi)的程式碼如下:程式部分內(nèi)容:第33頁/共198頁346.2.2 Literal控制項(xiàng)56789101112131415161718192021<scriptrunat="server">PrivatenumAsInteger'定義私用的欄位num,非Shared欄位
SubAddk(ByValkAsInteger)'可將此程序看作是Page類別的方法
num=num+kEndSub
ProtectedSubButton1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)
num=CInt(Literal1.Text)'將Literal1.Text值取出
Addk(3)Addk(3)num=num+1Label1.Text=num
Literal1.Text=CStr(num)'存入新的Literal1.Text值
EndSub</script>第34頁/共198頁356.2.2 Literal控制項(xiàng)範(fàn)例說明:(1)程式碼和範(fàn)例4-13非常類似,不過由於我們多了一個不可見的Literal1控制項(xiàng)可應(yīng)用。故在執(zhí)行前,先將Literal1的內(nèi)容取出作為這次執(zhí)行時num的初值(第14行)。而最後則將結(jié)果值回存到Literal1的內(nèi)容中(第19行)。(2)由於Literal1控制項(xiàng)始終存在,因此不論網(wǎng)頁來回執(zhí)行幾次,都能夠記錄上一次的值。並且由於Literal1控制項(xiàng)不可見,因此,使用者並不會看到保留的資訊。(3)這個範(fàn)例不會出現(xiàn)範(fàn)例5-1跨網(wǎng)頁共用變數(shù)的問題。因?yàn)槊恳粋€由他端新開啟的網(wǎng)頁,都會被配置一個新的Literal1控制項(xiàng),並且初值為0。(4)事實(shí)上,還有很多方法可以達(dá)到此功能,例如HiddenField控制項(xiàng)、ViewState、Session物件等。(5)事實(shí)上,這個範(fàn)例可以不使用num欄位變數(shù),而直接使用Literal1控制項(xiàng)來運(yùn)算,因?yàn)樗彩荘age的一個成員,只不過您可能需要進(jìn)行更多的型別轉(zhuǎn)換。第35頁/共198頁366.2.2 Literal控制項(xiàng)Step3:執(zhí)行程式。第36頁/共198頁376.3 HiddenField隱藏資訊控制項(xiàng)在範(fàn)例6-2中,我們希望某些資料被保留,但不顯示在網(wǎng)頁中,當(dāng)時我們採用的是不可見的Literal控制項(xiàng),事實(shí)上,任何可存放資料的控制項(xiàng)只要設(shè)定為不可見,都可以達(dá)到此目的,只不過Literal控制項(xiàng)消耗的系統(tǒng)資源相對較少而已。除了使用不可見的控制項(xiàng)保存資料外,我們也可以採用HiddenField控制項(xiàng)來記錄資料。但這種做法會讓客戶端瀏覽器在執(zhí)行【檢視原始碼】後,看到我們保留的資料,因此只適合資料不具保密性,也不怕被竄改時使用。HiddenField控制項(xiàng)的相關(guān)資訊如下:類別:System.Web.UI.WebControls.HiddenField類別功能:建立一個隱藏資訊。輸出的標(biāo)籤:<inputtype="hidden">。類別重要的新增成員:第37頁/共198頁386.3 HiddenField隱藏資訊控制項(xiàng)【範(fàn)例6-3】改寫範(fàn)例6-2,以HiddenField控制項(xiàng)取代不可見的Literal1控制項(xiàng)。第38頁/共198頁396.3 HiddenField隱藏資訊控制項(xiàng)範(fàn)例6-3:網(wǎng)站目錄ASPNET\ch06\ch06_03\(檔案ch06_03.aspx)Step1:網(wǎng)頁介面設(shè)計(jì)同範(fàn)例6-2,但去除Literal1控制項(xiàng)、新增一個HiddenField控制項(xiàng)。(所有控制項(xiàng)皆採相對定位、其餘屬性參照屬性窗格)。第39頁/共198頁406.3 HiddenField隱藏資訊控制項(xiàng)Step2:撰寫<script>內(nèi)的程式碼如下:程式部分內(nèi)容:第40頁/共198頁416.3 HiddenField隱藏資訊控制項(xiàng)56789101112131415161718192021<scriptrunat="server">PrivatenumAsInteger'定義私用的欄位num,非Shared欄位
SubAddk(ByValkAsInteger)'可將此程序看作是Page類別的方法
num=num+kEndSub
ProtectedSubButton1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)
num=CInt(HiddenField1.Value)
'將HiddenField1值取出
Addk(3)Addk(3)num=num+1Label1.Text=num
HiddenField1.Value=CStr(num)
'存入新的HiddenField1值
EndSub</script>第41頁/共198頁426.3 HiddenField隱藏資訊控制項(xiàng)範(fàn)例說明:(1)程式碼和範(fàn)例6-2非常類似,不過這次改用HiddenField控制項(xiàng)來存放資訊。同樣地,這個程式也可以不使用num欄位變數(shù)。(2)在執(zhí)行時,若於瀏覽器執(zhí)行【檢視原始碼】後,會看到HiddenField控制項(xiàng)產(chǎn)生的<inputtype="hidden">標(biāo)籤,因此,不具有保密性。這個方法並不常被程式設(shè)計(jì)師採用,想要在每一次網(wǎng)頁來回時保留資訊,大多採用的是ViewState及Session物件。不過ASP.NET時常採用這個技巧來保留資訊(但經(jīng)過編碼)。例如您在【檢視原始碼】中,也會看到其餘兩個<inputtype="hidden">標(biāo)籤,這是由ASP.NET自動產(chǎn)生的,我們會在後面說明這兩個標(biāo)籤的用處。Step3:執(zhí)行程式?!境淌綀?zhí)行結(jié)果】:(同範(fàn)例6-2)第42頁/共198頁436.3 HiddenField隱藏資訊控制項(xiàng)Step4:於瀏覽器執(zhí)行【檢視原始碼】會看到下列
<inputtype="hidden">標(biāo)籤。第43頁/共198頁446.4 文字輸入控制項(xiàng)輸入文字的Web伺服器控制項(xiàng)為TextBox控制項(xiàng)。相對於HTML中,有單行、密碼、多行等輸入文字的介面,在ASP.NET的Web伺服器控制項(xiàng)中,全部都交由TextBox控制項(xiàng)來完成。6.4.1 TextBox控制項(xiàng)TextBox控制項(xiàng)的相關(guān)資訊如下:類別:System.Web.UI.WebControls.TextBox類別功能:可產(chǎn)生文字方塊。輸出的標(biāo)籤:<inputtype="text或password"/>或<textarea>。第44頁/共198頁456.4 文字輸入控制項(xiàng)類別重要的新增成員:第45頁/共198頁466.4.1 TextBox控制項(xiàng)第46頁/共198頁476.4.1 TextBox控制項(xiàng)【Rows、Columns屬性說明】Height、Width、Rows、Columns都可以設(shè)定文字方塊的外觀長寬,前者以像素為單位,後者以字元為單位,但同時設(shè)定時,Height、Width會比Rows、Columns優(yōu)先考慮。故透過介面拉動文字方塊大小後,才設(shè)定Rows、Columns就會變成無作用(除非先刪除Height、Width屬性值)。使用範(fàn)例:見範(fàn)例6-4、6-5、6-6。第47頁/共198頁486.4.1 TextBox控制項(xiàng)【範(fàn)例6-4】設(shè)計(jì)一個網(wǎng)頁,包含三種不同的文字方塊,並處理多行文字方塊的換行字元問題。範(fàn)例6-4:網(wǎng)站目錄ASPNET\ch06\ch06_04\(檔案ch06_04.aspx)Step1:網(wǎng)頁介面設(shè)計(jì)如下(所有控制項(xiàng)皆採絕對定位)並設(shè)定屬性(其餘屬性參照屬性窗格)。第48頁/共198頁496.4.1 TextBox控制項(xiàng)第49頁/共198頁506.4.1 TextBox控制項(xiàng)Step2:撰寫兩個事件程序如下:程式部分內(nèi)容:第50頁/共198頁517891011121314151617181920212223242526ProtectedSubButton1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)DimstrAsNewString("")
str=TextBox1.Text&"您好<br/>"IfInformation.IsNumeric(TextBox2.Text)=FalseThenstr&="請輸入數(shù)字密碼"Label4.Text=strButton2_Click(sender,e)'呼叫
Return'離開程序
EndIfstr&="您的留言如下:<br/>"&TextBox3.Text
Label4.Text=str.Replace(vbCrLf,"<br/>")'處理換行字元
Button2_Click(sender,e)'呼叫EndSubProtectedSubButton2_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)TextBox1.Text=""TextBox2.Text=""TextBox3.Text=""EndSub第51頁/共198頁526.4.1 TextBox控制項(xiàng)範(fàn)例說明:(1)由於TextMode屬性的設(shè)定,因此三個文字方塊將呈現(xiàn)不同功能。TextBox1的寬度雖然較長,但仍舊只能輸入6個Unicode字元(因?yàn)镸axLength屬性設(shè)定為6)。(2)Button2按鈕是用來清除文字方塊的內(nèi)容。而Button2_Click()也可以讓其他其他程式碼呼叫,不過必須輸入正確的引數(shù),因此在第14、19行將獲得的參數(shù)當(dāng)作引數(shù)傳遞即可。(3)第18行是將換行字元替換為<br/>,否則在瀏覽器中,不會出現(xiàn)換行效果。而換行字元是我們在TextBox3中,輸入文字時使用【Enter】鍵造成的,因此這是一個不可見的特殊字元,VB為這些常數(shù)規(guī)劃了Microsoft.VisualBasic.Constants類別,其中的vbCrLf欄位可用來在程式中代表換行字元。至於如果輸入文字中包含空白字元,則請參閱範(fàn)例5-2,使用Replace(""," ")來取代。Step3:執(zhí)行程式。第52頁/共198頁53第53頁/共198頁546.4.1 TextBox控制項(xiàng)TextChanged事件當(dāng)資料回傳給伺服器端時,若文字方塊內(nèi)容與上次回傳時不同,則會產(chǎn)生TextChanged事件,並且ASP.NET會自動執(zhí)行「實(shí)體名_TextChanged()」程序?!竟?fàn)例6-5】設(shè)計(jì)一個留言網(wǎng)頁,若留言重複或空白,則出現(xiàn)警告訊息,並且不輸出留言。(輸出後,不清除舊留言,除非使用者自己按下【清除】鈕)範(fàn)例6-5:網(wǎng)站目錄ASPNET\ch06\ch06_05\(檔案ch06_05.aspx)Step1:網(wǎng)頁介面設(shè)計(jì)如下(所有控制項(xiàng)皆採絕對定位)並設(shè)定屬性(其餘屬性參照屬性窗格)。第54頁/共198頁55第55頁/共198頁566.4.1 TextBox控制項(xiàng)Step2:撰寫四個程序如下:(要產(chǎn)生TextBox1_TextChanged()程序,可以直接在TextBox1控制項(xiàng)上面按兩下)7891011121314151617181920ProtectedSubPage_Load(ByValsenderAsObject,ByValeAsSystem.EventArgs)Label1.Text=""Label2.Text=""EndSub
ProtectedSubButton1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)IfLabel2.Text=""ThenLabel1.Text="請勿重複輸入相同的留言"EndIfIfTextBox1.Text=""ThenLabel1.Text="請勿輸入空白留言"Label2.Text=""EndIfEndSub第56頁/共198頁576.4.1 TextBox控制項(xiàng)範(fàn)例說明:(1)第7~10行:每一次執(zhí)行網(wǎng)頁時,都一定會先執(zhí)行Page_Load,清除Label1與Label2的文字。2122232425262728293031ProtectedSubButton2_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)TextBox1.Text=""Label2.Text=""EndSub
ProtectedSubTextBox1_TextChanged(ByValsenderAsObject,ByValeAsSystem.EventArgs)DimstrAsNewString("")str&="您的留言如下:<br/>"&TextBox1.TextLabel2.Text=str.Replace(vbCrLf,"<br/>")'處理換行字元EndSub第57頁/共198頁586.4.1 TextBox控制項(xiàng)(2)第27~31行:如果使用者修改了TextBox1文字方塊的內(nèi)容時,當(dāng)資訊回傳到伺服器時,會先執(zhí)行TextBox1_TextChanged程序(在執(zhí)行完P(guān)age_Load之後)。而在本範(fàn)例,資訊要回傳到伺服器,只有按下Button1或Button2兩種可能。請注意,在本程序中,修改了Label2的內(nèi)容。(3)第12~20行:若是按下Button1【送出】鈕,則會執(zhí)行Button1_Click1程序,此時若Label2.Text為空字串,代表前面只執(zhí)行了Page_Load,而未執(zhí)行TextBox1_TextChanged程序,也就是文字方塊內(nèi)容其實(shí)並未改變,故第14行顯示勿輸入重複留言。而若TextBox1.Text為空字串(不論Label2.Text是否為空字串),都在第17行將警告訊息改為勿輸入空白。兩個If成立任一個,都會將Label2設(shè)為空字串,故只有在未輸入重複留言且未輸入空白時,才會利用Label2顯示收到的留言訊息。(4)第22~25行:若是按下Button2【清除】鈕,則清除兩個欄位。至於Label1為何不用清除,這是因?yàn)樵赑age_Load執(zhí)行時已經(jīng)清除,而所有程式只有在執(zhí)行Button1_Click程序時才可能改變Label1的內(nèi)容,但Button1_Click與Button2_Click只會執(zhí)行其中一個,故不需要清除Label1的內(nèi)容。第58頁/共198頁596.4.1 TextBox控制項(xiàng)(5)這個範(fàn)例告訴我們一件事實(shí),每一次執(zhí)行程式時,不一定只會執(zhí)行一個事件程序,並且TextBox1_TextChanged會比Button1_Click還先執(zhí)行,故我們可以擴(kuò)充圖5-6的網(wǎng)頁生命週期,將本範(fàn)例的網(wǎng)頁生命週期繪製如下圖。圖6-1範(fàn)例6-5的網(wǎng)頁生命週期第59頁/共198頁606.4.1 TextBox控制項(xiàng)Step3:執(zhí)行程式。第60頁/共198頁616.4.1 TextBox控制項(xiàng)上述的執(zhí)行過程,其網(wǎng)頁生命週期一共有三次,過程可以繪製如圖6-2,圖中標(biāo)號了1,2,3,只有三次是傳送資料到伺服器端,並且第1次只有標(biāo)頭資料,並無其他資料,而第2次與第3次則稱之為PostBack。第61頁/共198頁62圖6-2範(fàn)例6-5執(zhí)行過程中的三次網(wǎng)頁生命週期第62頁/共198頁636.4.2 讀取網(wǎng)頁與PostBack在圖6-2中,第一次讀取網(wǎng)頁使用的是GETmethod,第二次與第三次都是POSTmethod,這是HTTP資料傳輸?shù)膬纱蠓椒?。GET較無保密性,資料會放在網(wǎng)址列的後面,以「?」區(qū)隔網(wǎng)址與資料,多筆資料間則以「&」加以區(qū)隔。而POST則會經(jīng)過編碼包裝成一個封包(Package)來傳送。要在伺服器端判斷該次客戶端傳送過來的資訊是使用GET還是POST,可以讀取Page.Request.HttpMethod來達(dá)成例如您可以在範(fàn)例6-5中,增加一個標(biāo)籤來顯示Page.Request.HttpMethod的值,就可以判斷出每次客戶端送出要求時,使用的是哪一個方法。在ASP.NET的規(guī)劃下,除了第一次讀取網(wǎng)頁時使用GETmethod,其餘都是使用POSTmethod,因此每一個WebForm的<asp:form>輸出時,輸出的HTML原始碼就包含下列資訊,代表未來將使用POSTmethod傳送資訊。<formname="表單名稱"method="post"action="網(wǎng)頁本身的網(wǎng)址"id="表單名稱">
….有的控制項(xiàng)對應(yīng)的HTML標(biāo)籤…</form>第63頁/共198頁646.4.2 讀取網(wǎng)頁與PostBack因此,我們可以將圖6-2重新繪製如圖6-3與6-4,來解釋每一次網(wǎng)頁之間的傳遞過程。圖6-3ASP.NET每一次網(wǎng)頁之間的傳遞過程第64頁/共198頁656.4.2 讀取網(wǎng)頁與PostBack在圖6-3中,每一次的POST在ASP.NET中稱之為PostBack,因?yàn)閷禔SP.NET來說資料是回傳到伺服器端,故PostBack一般翻譯為「回傳」,而它將發(fā)生在第二次以後的每次傳送。而ASP.NET之所以能夠使用事件驅(qū)動方式來設(shè)計(jì),主要就是因?yàn)樗梢越逵蒔ostBack來執(zhí)行對應(yīng)的事件程序?!驹]】伺服器端的Page物件可以透過IsPostBack屬性,判斷此次網(wǎng)頁被要求執(zhí)行,是PostBack還是第一次連線。圖6-4ASP.NET的行為循環(huán)第65頁/共198頁666.4.2 讀取網(wǎng)頁與PostBack要進(jìn)行POST回傳資料(不考慮GET方式),客戶端只有兩種方式可以達(dá)成:1.在<form>標(biāo)籤中,包含一個<inputtype="submit">形成的按鈕。按下該按鈕後,就會將包含在<form>內(nèi)的資料POST送往到伺服器action對應(yīng)的目標(biāo)檔案。2.使用JavaScript的指令進(jìn)行POST送出資料到伺服器。而Button控制項(xiàng)的輸出就是一個<inputtype="submit">,故而範(fàn)例6-5必須等到按下Button1或Button2按鈕時,客戶端才會送出資料到伺服器端,而不是文字方塊內(nèi)容變動時就送出資料。第66頁/共198頁676.4.3 AutoPostBack屬性在前面我們已經(jīng)說過,除了使用JavaScript之外,要回傳(PostBack)資料給伺服器,只能透過submit按鈕(也就是Button控制項(xiàng))完成。而有些時候,我們希望在某個元件發(fā)生特定變化時,就能夠自動回傳(PostBack)資料給伺服器,以便伺服器立即作出反應(yīng)(例如選擇元件在項(xiàng)目選取與未選取時加以出現(xiàn)某些提示訊息)。遇到這種需求,我們可以將控制項(xiàng)的AutoPostBack屬性設(shè)定為True,就可以達(dá)到目的了。而設(shè)定AutoPostBack屬性後,實(shí)際上在進(jìn)行AutoPostBack時,ASP.NET是利用JavaScript的指令來完成的。第67頁/共198頁686.4.3 AutoPostBack屬性不過,每一種控制項(xiàng)發(fā)生AutoPostBack的時機(jī)有些不同例如選擇元件可以在控制項(xiàng)選擇改變時就自動AutoPostBack但文字方塊控制項(xiàng)則必須要等到焦點(diǎn)移開文字方塊後,才會自動AutoPostBack,這主要原因是在於它必須確保您已經(jīng)完成了所有文字的輸入(否則每輸入一個字就來回讀取網(wǎng)頁一次,將會造成伺服器的負(fù)擔(dān)太大)我們透過一個範(fàn)例來進(jìn)行詳細(xì)的探討?!竟?fàn)例6-6】製作一個累加器,當(dāng)使用者在文字方塊中輸入數(shù)值後,只要一將焦點(diǎn)離開文字方塊,就立即執(zhí)行加法並將結(jié)果呈現(xiàn)在旁邊的標(biāo)籤中。範(fàn)例6-6:網(wǎng)站目錄ASPNET\ch06\ch06_06\(檔案ch06_06.aspx)第68頁/共198頁696.4.3 AutoPostBack屬性Step1:網(wǎng)頁介面設(shè)計(jì)如下(所有控制項(xiàng)皆採絕對定位)並設(shè)定屬性(其餘屬性參照屬性窗格)。第69頁/共198頁706.4.3 AutoPostBack屬性Step2:撰寫TextBox1_TextChanged程序如下:程式部分內(nèi)容:範(fàn)例說明:這個程式?jīng)]有按鈕,所以也沒有Button_Click程序。在TextBox1控制項(xiàng)上按兩下即可產(chǎn)生上述程序,然後加入程式碼用以累加與清除內(nèi)容。Step3:執(zhí)行程式。78910ProtectedSubTextBox1_TextChanged(ByValsenderAsObject,ByValeAsSystem.EventArgs)Label1.Text=CStr(CInt(Label1.Text)+CInt(TextBox1.Text))TextBox1.Text=""EndSub第70頁/共198頁71第71頁/共198頁726.4.3 AutoPostBack屬性Step4:重新執(zhí)行程式,並於第一次執(zhí)行後,於瀏覽器中執(zhí)行快顯功能表的【檢視原始碼】指令,結(jié)果如下。1234567891011121314…<formname="form1"method="post"action="ch06_06.aspx"id="form1"><div><inputtype="hidden"name="__EVENTTARGET"id="__EVENTTARGET"value=""/><inputtype="hidden"name="__EVENTARGUMENT"id="__EVENTARGUMENT"value=""/><inputtype="hidden"name="__LASTFOCUS"id="__LASTFOCUS"value=""/></div><scripttype="text/javascript">//<![CDATA[vartheForm=document.forms['form1'];if(!theForm){theForm=document.form1;}第72頁/共198頁73151617181920212223242526272829303132333435function__doPostBack(eventTarget,eventArgument){if(!theForm.onsubmit||(theForm.onsubmit()!=false)){theForm.__EVENTTARGET.value=eventTarget;theForm.__EVENTARGUMENT.value=eventArgument;theForm.submit();}}//]]></script><scriptsrc="/ch06_06/WebResource.axd?d=Rv27NON6rxtFiA1VUkfCEA2&t=633777789737343750"type="text/javascript"></script><div><inputname="TextBox1"type="text"id="TextBox1"onchange="javascript:setTimeout('__doPostBack(\'TextBox1\',\'\')',0)"onkeypress="if(WebForm_TextBoxKeyHandler(event)==false)returnfalse;"style="top:22px;left:10px;position:absolute;height:20px;width:74px"/></div></form>…第73頁/共198頁746.4.3 AutoPostBack屬性【原始碼說明】(1)上述原始碼已經(jīng)刪減許多,而留下來的全都是為了完成文字方塊內(nèi)容改變時得以自動進(jìn)行AutoPostBack所產(chǎn)生的HTML與JavaScript。(2)首先,第29行的onchange是當(dāng)文字方塊內(nèi)容發(fā)生變化時要執(zhí)行的內(nèi)嵌JavaScript事件函式。由於setTimeout函式的緣故,所以它會在0秒後呼叫__doPostBack(\‘TextBox1\’,\‘\’)函式。(3)至於__doPostBack函式則被定義在第15~20行,它有兩個參數(shù),第一個為取得事件目標(biāo),第二個為取得事件參數(shù)。1.利用theForm變數(shù)取得網(wǎng)頁中的form1物件。2.第16行:此時是否為form1發(fā)生onsubmit事件,若是則不必利用JavaScript進(jìn)行處理而離開__doPostBack函式。第74頁/共198頁756.4.3 AutoPostBack屬性3.第17~18行是將取得的兩個參數(shù)設(shè)定給第4、5行的二個隱藏欄位,以便於回傳給伺服器時一起回送。4.第19行是最重要的一行,它是將表單資料進(jìn)行傳送伺服器的動作,submit()也就是JavaScript中,用以產(chǎn)生PostBack行為的函式。(4)上述JavaScript程式碼對於一般初學(xué)者而言,是非常困難的,不過您不用擔(dān)心,我們只需要設(shè)定控制項(xiàng)的AutoPostBack屬性為True,ASP.NET就會自動幫我們在回傳給客戶端的資料中加入這些必要的JavaScript程式碼,一行程式也不用寫。第75頁/共198頁766.5 傳送控制項(xiàng)除了使用AutoPostBack方式自動回傳表單資料給伺服器,一般常使用的方式仍是以submit按鈕來完成資料的傳送。而在ASP.NET中,與按鈕有關(guān)的控制項(xiàng)一共有Button、ImageButton與LinkButton等三種控制項(xiàng)。6.5.1 Button控制項(xiàng)Button控制項(xiàng)就是我們在前面常使用的按鈕控制項(xiàng),它以文字按鈕的外觀呈現(xiàn)於網(wǎng)頁中。並且會在輸出時,轉(zhuǎn)換為<form>標(biāo)籤內(nèi)的<inputtype="submit">標(biāo)籤。Button控制項(xiàng)的相關(guān)資訊如下:類別:System.Web.UI.WebControls.Button類別功能:產(chǎn)生文字型式的按鈕。輸出的標(biāo)籤:<inputtype=“submit”>。若UseSubmitBehavior屬性設(shè)定為False,則輸出為<inputtype=“button”>,並使用JavaScript進(jìn)行submit動作。類別重要的新增成員:第76頁/共198頁77第77頁/共198頁78【PostBackUrl屬性說明】在ASP.NET的規(guī)劃中,WebForm對應(yīng)的<form>標(biāo)籤之a(chǎn)ction屬性將永遠(yuǎn)記載為網(wǎng)頁本身的網(wǎng)址。如果想要進(jìn)行網(wǎng)頁轉(zhuǎn)向,則可以使用Response.Redirect,但如果想要同時POST表單資料,則應(yīng)該使用PostBackUrl屬性來完成。一般我們並不建議這麼做,除非是想要POST的目標(biāo)網(wǎng)頁是非ASP.NET網(wǎng)頁,例如PHP、傳統(tǒng)ASP、JSP等。在ASP.NET中,我們較常使用的方式仍舊是單一網(wǎng)頁型式並以事件驅(qū)動模型來開發(fā),如此較為單純。第78頁/共198頁796.5.1 Button控制項(xiàng)使用範(fàn)例:見之前的眾範(fàn)例及範(fàn)例6-7?!竟?fàn)例6-7】設(shè)計(jì)一個網(wǎng)頁,包含三個按鈕,功能為對樂透球號進(jìn)行不同的顯示方式。範(fàn)例6-7:網(wǎng)站目錄ASPNET\ch06\ch06_07\(檔案ch06_07.aspx)Step1:網(wǎng)頁介面設(shè)計(jì)如下(所有控制項(xiàng)皆採相對定位)並設(shè)定屬性(其餘屬性參照屬性窗格)。第79頁/共198頁806.5.1 Button控制項(xiàng)第80頁/共198頁816.5.1 Button控制項(xiàng)屬性窗格切換到事件頁籤,並將三個按鈕的Command事件都設(shè)定為Button1_Command。Step2:撰寫<script>內(nèi)的程式碼如下:程式部分內(nèi)容:第81頁/共198頁825678910111213141516171819202122232425262728<scriptrunat="server">
Dimballs()AsInteger={37,14,20,6,38,42}DimspecBallAsInteger=15'若需從檔案載入球號,可以撰寫於Page_Load程序中
ProtectedSubButton1_Command(ByValsenderAsObject,ByValeAsSystem.Web.UI.WebControls.CommandEventArgs)Label1.Text="球號":Label2.Text="特別號:"SelectCasee.CommandName
Case"Original"Label1.Text&="(原始順序):"Case"Sort"SortBy(CStr(e.CommandArgument))Label1.Text&="(排序):"CaseElseLabel1.Text&="發(fā)生錯誤"EndSelect
ForEachnumInballsLabel1.Text&=CStr(num)&""Next
Label2.Text&=CStr(specBall)EndSub第82頁/共198頁836.5.1 Button控制項(xiàng)範(fàn)例說明:(1)第11~28行:Button1_Command會在按鈕被按下後執(zhí)行。其中利用「e.CommandName」判斷是哪一個按鈕被按下,當(dāng)然如果您想要使用sender來判斷也可以。2930313233343536SubSortBy(ByValcommandArgAsString)Array.Sort(balls)'遞增排序
IfcommandArg="遞減"ThenArray.Reverse(balls)'已遞增故反向即可
EndIfEndSub</script>第83頁/共198頁846.5.1 Button控制項(xiàng)這個範(fàn)例是本書第一次示範(fàn)事件物件e的使用方式,而此時的e之型別為CommandEventArgs類別,您可以查閱它有兩個屬性CommandArgument與CommandName屬性,恰好對應(yīng)按鈕物件的同名屬性。而由於CommandName屬性回傳值型別為String,故可以直接用來在Select…Case中當(dāng)作條件值。(2)第30~35行:由於CommandArgument屬性的型別為Object(事實(shí)上,它是為了要對應(yīng)可能出現(xiàn)的不定數(shù)量之參數(shù)而如此宣告),因此第17行先使用CStr()將之轉(zhuǎn)換後呼叫SortBy()程序。由於必定要經(jīng)過排序,故先排序後再決定是否需要反轉(zhuǎn)。Step3:執(zhí)行程式。第84頁/共198頁85第85頁/共198頁866.5.2 ImageButton控制項(xiàng)ImageButton控制項(xiàng)可以製作圖片型式的按鈕,您必須設(shè)定圖片的來源位址,並且傳送時也可以接收到滑鼠游標(biāo)在按下圖片按鈕時的座標(biāo)。ImageButton控制項(xiàng)的相關(guān)資訊如下:類別:System.Web.UI.WebControls.ImageButton類別重要的繼承類別:本類別繼承自System.Web.UI.WebControls.Image類別功能:產(chǎn)生圖片型式的按鈕。輸出的標(biāo)籤:<inputtype="image">。類別重要的新增成員:第86頁/共198頁876.5.2 ImageButton控制項(xiàng)第87頁/共198頁886.5.2 ImageButton控制項(xiàng)使用範(fàn)例:見範(fàn)例6-8。第88頁/共198頁896.5.3 LinkButton控制項(xiàng)LinkButton控制項(xiàng)可以製作超鏈結(jié)型式的按鈕,事實(shí)上,它就是一個超鏈結(jié),外觀上與HyperLink控制項(xiàng)相同,但功能接近於Button控制項(xiàng)。它的輸出是一個<a>錨標(biāo)籤,不過href並不像一般超鏈結(jié)直接設(shè)定目標(biāo)網(wǎng)址,而是執(zhí)行一個內(nèi)嵌的JavaScript,並呼叫__doPostBack函式進(jìn)行回傳動作。LinkButton控制項(xiàng)的相關(guān)資訊如下:類別:System.Web.UI.WebControls.LinkButton類別功能:產(chǎn)生超鏈結(jié)型式的按鈕。輸出的標(biāo)籤:<ahref="javascript:__doPostBack('名稱','')">文字</a>。類別重要的新增成員:第89頁/共198頁906.5.3 LinkButton控制項(xiàng)使用範(fàn)例:見範(fàn)例6-8。第90頁/共198頁916.5.3 LinkButton控制項(xiàng)【範(fàn)例6-8】圖形按鈕及超鏈結(jié)按鈕的練習(xí)。範(fàn)例6-8:網(wǎng)站目錄ASPNET\ch06\ch06_08\(檔案ch06_08.aspx)【預(yù)備資源】:Time.jpg事先位於\ch06\ch06_08\目錄中Step1:網(wǎng)頁介面設(shè)計(jì)如下(所有控制項(xiàng)皆採相對定位)並設(shè)定屬性(其餘屬性參照屬性窗格)。第91頁/共198頁926.5.3 LinkButton控制項(xiàng)【加入圖片的方式:ImageUrl屬性】先在介面中加入ImageButton1控制項(xiàng),然後到屬性窗格中,點(diǎn)選該控制項(xiàng)的ImageUrl屬性值,如下圖。第92頁/共198頁936.5.3 LinkButton控制項(xiàng)第93頁/共198頁946.5.3 LinkButton控制項(xiàng)Step2:撰寫兩個事件程序如下:範(fàn)例說明:(1)第11~13行:按下超鏈結(jié)按鈕後會執(zhí)行LinkButton1_Click事件程序。(2)第7~9行:按下圖片按鈕後會執(zhí)行ImageButton1_Click事件程序,其中e.X與e.Y是取出滑鼠按下時的座標(biāo)。Step3:執(zhí)行程式。78910111213ProtectedSubImageButton1_Click(ByValsenderAsObject,ByValeAsSystem.Web.UI.ImageClickEventArgs)Label1.Text="您按下了圖片按鈕,按下時的游標(biāo)座標(biāo)為("&e.X&","&e.Y&")"EndSubProtectedSubLinkButton1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)Label1.Text="您按下了鏈結(jié)按鈕"EndSub第94頁/共198頁95第95頁/共198頁966.6 選擇控制項(xiàng)ASP.NET提供的選擇控制項(xiàng)種類眾多,包含單選、複選、選單等種類,有時我們會希望在選取某些項(xiàng)目時立即作出反應(yīng),此時通常搭配該控制項(xiàng)的AutoPostBack屬性來完成。6.6.1 CheckBox多選控制項(xiàng)CheckBox控制項(xiàng)將會在網(wǎng)頁中出現(xiàn)一個核取方塊,使用者可以勾選該方塊,代表選取對應(yīng)的項(xiàng)目。CheckBox控制項(xiàng)的相關(guān)資訊如下:類別:System.Web.UI.WebControls.CheckBox類別功能:可產(chǎn)生一個核取方塊(包含其說明文字)。輸出的標(biāo)籤:核取方塊以<inputtype="checkbox"/>標(biāo)籤出現(xiàn)。
說明文字以<labelfor="方塊名稱">說明文字</label>標(biāo)籤出現(xiàn)。類別重要的新增成員:第96頁/共198頁97第97頁/共198頁986.6.1 CheckBox多選控制項(xiàng)使用範(fàn)例:見範(fàn)例6-9。
【範(fàn)例6-9】核取方塊的練習(xí)。範(fàn)例6-9:網(wǎng)站目錄ASPNET\ch06\ch06_09\(檔案ch06_09.aspx)Step1:網(wǎng)頁介面設(shè)計(jì)如下(所有控制項(xiàng)皆採相對定位)並設(shè)定屬性(其餘屬性參照屬性窗格)。第98頁/共198頁99Step2:撰寫兩個事件程序如下:程式部分內(nèi)容:78910111213ProtectedSubCheckBox3_CheckedChanged(ByValsenderAsObject,ByValeAsSystem.EventArgs)IfCheckBox3.Checked=TrueThenCheckBox3.Text="螢?zāi)?螢?zāi)粸榇?不適用永久保固)"ElseCheckBox3.Text="螢?zāi)?EndIfEndSub第99頁/共198頁1006.6.1 CheckBox多選控制項(xiàng)141516171819202122232425262728293031ProtectedSubButton1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)If(CheckBox1.CheckedOrCheckBox2.Checked_OrCheckBox3.Checked)=FalseThenLabel1.Text="請選擇至少一樣產(chǎn)品"ReturnEndIfLabel1.Text="您所訂購的產(chǎn)品如下:<br/>"IfCheckBox1.Checked=TrueThenLabel1.Text&=CheckBox1.Text&"<br/>"EndIfIfCheckBox2.Checked=TrueThenLabel1.Text&=CheckBox2.Text&"<br/>"EndIfIfCheckBox3.Checked=TrueThenLabel1.Text&=CheckBox3.Text.Substring(0,2)&"<br/>"EndIfEndSub第100頁/共198頁1016.6.1 CheckBox多選控制項(xiàng)範(fàn)例說明:(1)第7~13行:點(diǎn)選CheckBox3時,會自動立即執(zhí)行(因?yàn)橐呀?jīng)設(shè)定該控制項(xiàng)的AutoPostBack屬性為True),藉由CheckBox3.Checked判斷選項(xiàng)是否被選取。(2)第15~31行:按下按鈕後會執(zhí)行,第16~20行是當(dāng)三個選項(xiàng)都未被按下時執(zhí)行。Step3:執(zhí)行程式。第101頁/共198頁102第102頁/共198頁1036.6.2 CheckBoxList多選清單控制項(xiàng)假設(shè)我們有許多的核取方塊需要出現(xiàn)在網(wǎng)頁中,並且它們具有同一性質(zhì)且允許複選(例如使用者可選擇索取1~12月中任幾個月的交易資料),此時除了可以使用CheckBox控制項(xiàng)一個一個的建立選項(xiàng)之外,也可以直接使用CheckBoxList控制項(xiàng),建立核取方塊清單。CheckBoxList控制項(xiàng)中的每個選項(xiàng)合起來會形成一個ListItemCollection集合,並且還可以動態(tài)繫結(jié)XML或資料庫檔案,自動設(shè)定各選項(xiàng)的文字。CheckBoxList控制項(xiàng)的相關(guān)資訊如下:類別:System.Web.UI.WebControls.CheckBoxList類別重要繼承類別:本類別繼承自System.Web.UI.WebControls.ListControl類別其他
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 五育課題申報(bào)書模板
- 德育教改課題申報(bào)書
- 體育跨學(xué)科課題申報(bào)書
- 小學(xué)課題申報(bào)評審書范文
- 地理教學(xué)課題申報(bào)書
- 代簽離婚協(xié)議合同范例
- 劣質(zhì)柴油采購合同范本
- 傳媒經(jīng)紀(jì)人合同范本
- 吊車租賃機(jī)械合同范例
- 農(nóng)村油漆購買合同范本
- 2025年內(nèi)蒙古建筑職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫及答案1套
- 眼視光行業(yè)現(xiàn)狀及展望
- 2024年云南省高等職業(yè)技術(shù)教育招生考試數(shù)學(xué)試題
- 《汽車專業(yè)英語》2024年課程標(biāo)準(zhǔn)(含課程思政設(shè)計(jì))
- 部編四年級道德與法治下冊全冊教案(含反思)
- JBT 11699-2013 高處作業(yè)吊籃安裝、拆卸、使用技術(shù)規(guī)程
- AutoCAD 2020中文版從入門到精通(標(biāo)準(zhǔn)版)
- 煙草栽培(二級)鑒定理論考試復(fù)習(xí)題庫-上(單選題匯總)
- DB32T 4353-2022 房屋建筑和市政基礎(chǔ)設(shè)施工程檔案資料管理規(guī)程
- 水廠施工組織設(shè)計(jì)(完整版)
- 最新急診上消化道出血急診診治流程專家共識(全文)
評論
0/150
提交評論