九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
asp.net夜話之六:asp.net基本控件

 

asp.net夜話之六:asp.net基本控件


在本系列之三《asp.net夜話之三:表單和控件》中講到了HTML服務(wù)器控件,HTML服務(wù)器控件有如下特點:
(1)HTML服務(wù)器控件是建立在HTML控件的基礎(chǔ)上,額外增加了一個在當(dāng)前頁面中唯一的ID屬性值和一個runat=”server”屬性;
(2)HTML服務(wù)器控件必須放在服務(wù)器端表單中,也就是必須在<form runat=”server” id=”form表單ID”></form>標(biāo)記之中。
(3)HTML服務(wù)器控件最終在Web服務(wù)器處會被解釋成普通HTML控件標(biāo)記發(fā)送到客戶端瀏覽器。
asp.net服務(wù)器控件是微軟為了方便開發(fā)者開發(fā)而推出的一系列控件,它們都以類似<asp:* ID='btnOK' runat='server' …/>的方式出現(xiàn)在Visual Studio 2005的源視圖里,*代表了控件名,如<asp:Button ID='btnOK' runat='server' Text='提交' />就表示這是一個Button控件。asp.net服務(wù)器控件除了提供HTML服務(wù)器控件所能提供的功能之外,還有很多功能更為復(fù)雜的控件。這些控件可以分為簡單控件、容器控件、數(shù)據(jù)綁定控件、數(shù)據(jù)源控件和數(shù)據(jù)驗證控及用戶自己根據(jù)自己業(yè)務(wù)需要將一些控件組合在一起組成的用戶控件等。
asp.net控件的特點與HTML服務(wù)器控件類似,也有如下特點:
(1)asp.net服務(wù)器控件必須有一個在當(dāng)前頁面中唯一的ID屬性和runat=”server”屬性;
(2)asp.net服務(wù)器控件必須放在服務(wù)器端表單中;
(3)asp.net服務(wù)器控件最終會被解釋成普通HTML標(biāo)記發(fā)送到客戶端瀏覽器。

本文主要介紹以下控件:
Button控件
TextBox控件
Web服務(wù)器控件的特殊客戶端事件
FileUpload控件
Literal控件
Panel控件
PlaceHolder控件

Button控件
Button控件是asp.net開發(fā)時最常見的控件之一,我們創(chuàng)建一個頁面名為ServerControl.aspx,下面就是這個頁面的前臺代碼:

  1. <%@ Page Language='C#' AutoEventWireup='true' CodeFile='ServerControl.aspx.cs' Inherits='ServerControl' %>

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

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

  4. <head runat='server'>

  5.     <title>無標(biāo)題頁</title>

  6. </head>

  7. <body>

  8.     <form id='form1' runat='server'>

  9.     <div>

  10.     <table border='0' width='100%'>

  11.     <tr><td>

  12.         </td><td></td></tr>

  13.     <tr><td></td><td></td></tr>

  14.     <tr><td></td><td></td></tr>

  15.     <tr><td></td><td></td></tr>

  16.     <tr><td><asp:Button ID='btnOK' runat='server' Text='提交' /></td><td></td></tr>

  17.     </table>

  18.     </div>

  19.     </form>

  20. </body>

  21. </html>

這個頁面在客戶端一個只有一個提交按鈕的頁面,我們點擊這個按鈕的時候頁面會刷新,它在客戶端瀏覽器的HTML代碼如下:

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

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

  3. <head><title>

  4.  無標(biāo)題頁

  5. </title></head>

  6. <body>

  7.     <form name='form1' method='post' action='ServerControl.aspx' id='form1'>

  8. <div>

  9. <input type='hidden' name='__VIEWSTATE' id='__VIEWSTATE' value='/wEPDwUKMTQ2OTkzNDMyMWRkT/VDzJ0SWn3BqgG/UOUV4Cqu7NY=' />

  10. </div>

  11.     <div>

  12.     <table border='0' width='100%'>

  13.     <tr><td>

  14.         </td><td></td></tr>

  15.     <tr><td></td><td></td></tr>

  16.     <tr><td></td><td></td></tr>

  17.     <tr><td></td><td></td></tr>

  18.     <tr><td><input type='submit' name='btnOK' value='提交' id='btnOK' /></td><td></td></tr>

  19.     </table>

  20.     </div>

  21. <div>

  22.  <input type='hidden' name='__EVENTVALIDATION' id='__EVENTVALIDATION' value='/wEWAgKFss63DQLdkpmPAbagjAxymGXZUaR5sNMBZHmUjoKd' />

  23. </div></form>

  24. </body>

  25. </html>

可見默認(rèn)情況下,Button控件被解釋成<input type=”submit” …/>形勢的提交按鈕,并且這個按鈕的客戶端id(即在HTML代碼中的id屬性)和我們在服務(wù)器端指定的id是一致的。還有一點要說明的是,在設(shè)計時表單的代碼是“<form id='form1' runat='server'>”,到了客戶端變成了“<form name='form1' method='post' action='ServerControl.aspx' id='form1'>”,這也是幕后的工作,我們的表單發(fā)送到客戶端時被設(shè)置成post提交方式,接收表單數(shù)據(jù)的頁面是當(dāng)前頁面(當(dāng)前頁面就是ServerControl.aspx)。
因為Button控件默認(rèn)生成HTML的提交按鈕,所以點擊這個按鈕自然就有了提交表單行為,并且默認(rèn)是提交到當(dāng)前頁面處理。
Button按鈕常見屬性有如下:

屬性名屬性類型屬性說明
CausesValidationbool 指示在單擊 Button 控件時是否執(zhí)行驗證
CommandArgumentstring該參數(shù)會傳遞到Command 事件
CssClassstring該參數(shù)指示控件在客戶端呈現(xiàn)的級聯(lián)樣式表 (CSS) 類
Enabledbool指示是否啟用 Web 服務(wù)器控件
OnClientClickstringButton 控件的 Click 事件時所執(zhí)行的客戶端腳本
Textstring在 Button 控件中顯示的文本標(biāo)題
ValidationGroupstringButton 控件回發(fā)到服務(wù)器時要進(jìn)行驗證的控件組

  
Button控件的常見事件

事件名委托類型事件說明
ClickEventHandler單擊Button控件激發(fā)的事件
CommandCommandEventHandler單擊Button控件激發(fā)的事件

  
今天要講的是CommandArgument、CssClass、OnClientClick屬性和Click及Command事件。其它如CausesValidation和ValidationGroup會在驗證控件部分再具體講。
CssClass這個屬性非常有用,如果是單個按鈕我們可以直接設(shè)置Button的前景色、背景色及Style屬性,可是在大型網(wǎng)站中這么設(shè)置非常不方便,并且維護(hù)起來非常不方便。試想一下,在一個網(wǎng)站中有數(shù)百個甚至數(shù)千個Button按鈕,有一天客戶想改變它們的風(fēng)格,那么是多么枯燥的一件事情,CssClass就是用來設(shè)置控件的css屬性的(這個屬性很多控件都有),這樣在外部css樣式文件中改變一下,整個網(wǎng)站的Button控件顯示風(fēng)格全部變化了,非常方便。
OnClientClick這個屬性用于一些需要客戶端交互的場合,比如點擊這個按鈕會從數(shù)據(jù)庫刪除一些數(shù)據(jù),有可能客戶無意中點了這個按鈕,那么我們可以給用戶一次確認(rèn)的機會,一旦用戶吃了秤砣鐵了心要刪除他只需要確認(rèn)一下就可以,如果不小心碰上這個按鈕還可以點擊“否”來取消。有經(jīng)驗的程序員在一些重要操作的時候都會給出這個提示,這個提示其實就是利用javascript的confirm()函數(shù)來實現(xiàn)。
Click和Command事件都是單擊Button按鈕時發(fā)生的事件,可是處理它們的委托類型不同,激發(fā)Click事件由 EventHandler委托來處理,激發(fā)Command事件后由CommandEventHandler委托來處理,看看它們的聲明:

  1. public delegate void EventHandler (

  2.  Object sender,

  3.  EventArgs e

  4. )

  5. public delegate void CommandEventHandler (

  6.  Object sender,

  7.  CommandEventArgs e

  8. )

看出區(qū)別來了嗎?它們都有兩個參數(shù),第一個參數(shù)表示由哪個控件激發(fā)了事件,第二個參數(shù)表示發(fā)生事件時的一些事件數(shù)據(jù)。這兩個委托第一個參數(shù)都是相同的,第二個參數(shù)不同,EventArgs這個類不帶有任何事件數(shù)據(jù)(這個委托很常見,不關(guān)心事件數(shù)據(jù)的事件都是用這個委托處理),而CommandEventArgs可以附帶事件數(shù)據(jù),它有兩個重要屬性:CommandArgument和CommandName。CommandArgument屬性可以附帶一些參數(shù)信息,CommandName用于設(shè)置命名的名稱。
下面對剛才的頁面添加更多代碼,前臺代碼如下:

  1. <%@ Page Language='C#' AutoEventWireup='true' CodeFile='ServerControl.aspx.cs' Inherits='ServerControl' %>

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

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

  4. <head runat='server'>

  5.     <title>無標(biāo)題頁</title>

  6.     <style type='text/css'>

  7.     .zhoufoxcn

  8.     {

  9.     color:#0000C0;

  10.     background-color:Olive;

  11.     border-color:Red;

  12.     border-style:Dotted;

  13.     }

  14.     .redfoxcn

  15.     {

  16.     color:red;

  17.     background-color:Olive;

  18.     border-color:#0000C0;

  19.     border-style:Dotted;

  20.     }

  21.     </style>

  22. </head>

  23. <body>

  24.     <form id='form1' runat='server'>

  25.     <div>

  26.     <table border='0' width='100%'>

  27.     <tr><td>

  28.         </td><td></td></tr>

  29.     <tr><td></td><td></td></tr>

  30.     <tr><td></td><td></td></tr>

  31.     <tr><td>

  32.         </td><td></td></tr>

  33.     <tr><td><asp:Button ID='btnOK' runat='server' Text='Click' OnClientClick='javascript:return confirm('確認(rèn)提交?')' OnClick='btnOK_Click' CssClass='zhoufoxcn' /></td><td>

  34.         <asp:Button ID='btnCommand' runat='server'

  35.             Text='Command' OnCommand='btnCommand_Command' CommandArgument='1' CssClass='redfoxcn' /></td></tr>

  36.     </table>

  37.     </div>

  38.     </form>

  39. </body>

  40. </html>

后臺cs代碼如下:

  1. using System;

  2. using System.Data;

  3. using System.Configuration;

  4. using System.Collections;

  5. using System.Web;

  6. using System.Web.Security;

  7. using System.Web.UI;

  8. using System.Web.UI.WebControls;

  9. using System.Web.UI.WebControls.WebParts;

  10. using System.Web.UI.HtmlControls;

  11. public partial class ServerControl : System.Web.UI.Page

  12. {

  13.     protected void Page_Load(object sender, EventArgs e)

  14.     {

  15.     }

  16.     protected void btnOK_Click(object sender, EventArgs e)

  17.     {

  18.         Response.Write('發(fā)生了Click事件。');

  19.     }

  20.     protected void btnCommand_Command(object sender, CommandEventArgs e)

  21.     {

  22.         Response.Write('發(fā)生了Command事件,事件的數(shù)據(jù)是:' + e.CommandArgument.ToString());

  23.     }

  24. }

在前臺代碼中我們定義了css樣式,定義了兩個css類:zhoufoxcn和redfoxcn。ID為“btnOK”的Button控件的CsssClass屬性為zhoufoxcn,它的OnClientClick屬性為'javascript:return confirm('確認(rèn)提交?')',用戶在瀏覽器點擊這個按鈕的時候會彈出一個“確認(rèn)提交?”的詢問對話框,用戶點擊“是”提交當(dāng)前表單,否則不會將表單提交到服務(wù)器進(jìn)行處理,這個控件的OnClick屬性值為“btnOK_Click”,“btnOK_Click”是服務(wù)器上的一個方法,注意這個服務(wù)器方法一定要存在,并且滿足EventHandler委托參數(shù)類型要求,否則不會編譯通過。另外ID為“btnCommand”的Button控件的OnCommand屬性為“btnCommand_Command”,這也是一個服務(wù)器端方法。給Button控件添加OnClick添加處理方法時雙擊就可以切換到cs代碼,服務(wù)器會自動添加相關(guān)代碼,但是給OnCommand添加相關(guān)處理方法時,不能這么做,只能通過在界面中找到該Button控件,在屬性欄中點擊事件,雙擊Command右邊的空白處,如下圖所示:

 
下面是瀏覽器中的HTML代碼:

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

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

  3. <head><title>

  4.  無標(biāo)題頁

  5. </title>

  6.     <style type='text/css'>

  7.     .zhoufoxcn

  8.     {

  9.     color:#0000C0;

  10.     background-color:Olive;

  11.     border-color:Red;

  12.     border-style:Dotted;

  13.     }

  14.     .redfoxcn

  15.     {

  16.     color:red;

  17.     background-color:Olive;

  18.     border-color:#0000C0;

  19.     border-style:Dotted;

  20.     }

  21.     </style>

  22. </head>

  23. <body>

  24.     <form name='form1' method='post' action='ServerControl.aspx' id='form1'>

  25. <div>

  26. <input type='hidden' name='__VIEWSTATE' id='__VIEWSTATE' value='/wEPDwUKMTQ3NjkyOTcyMmRkO5nkxzPqNMQvNwHngU2sXldPuhM=' />

  27. </div>

  28.     <div>

  29.     <table border='0' width='100%'>

  30.     <tr><td>

  31.         </td><td></td></tr>

  32.     <tr><td></td><td></td></tr>

  33.     <tr><td></td><td></td></tr>

  34.     <tr><td>

  35.         </td><td></td></tr>

  36.     <tr><td><input type='submit' name='btnOK' value='Click' onclick='javascript:return confirm('確認(rèn)提交?');' id='btnOK' class='zhoufoxcn' /></td><td>

  37.         <input type='submit' name='btnCommand' value='Command' id='btnCommand' class='redfoxcn' /></td></tr>

  38.     </table>

  39.     </div>

  40. <div>

  41.  <input type='hidden' name='__EVENTVALIDATION' id='__EVENTVALIDATION' value='/wEWAwKfyNPeBgLdkpmPAQLmjabZCHH72VxzRufctQapudcEco8xXEb0' />

  42. </div></form>

  43. </body>

  44. </html>


下面是運行情況:

 
點擊“Click”的情況:
 
點擊“Command”按鈕后的運行情況:
 

需要注意的是:Click事件和Command事件不能同時使用,如果需要事件的數(shù)據(jù),那么就用Command事件,然后設(shè)置CommandEventArgs屬性來附帶事件數(shù)據(jù),如果不關(guān)心事件數(shù)據(jù),那么直接用Click屬性就行了。

TextBox控件
TextBox控件用來提供一個輸入框,這個輸入框默認(rèn)是輸入單行文本的,但是我們可以設(shè)置它的TextMode屬性來控制輸入框的形式。它可以是以下三個值:
TextMode='SingleLine':用來輸入單行文本
TextMode='Password':用來輸入密碼
TextMode='MultiLine':用來輸入多行文本
下面對ServerControl.aspx的前臺再做一下改造,代碼如下:

  1. <%@ Page Language='C#' AutoEventWireup='true' CodeFile='ServerControl.aspx.cs' Inherits='ServerControl' %>

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

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

  4. <head runat='server'>

  5.     <title>無標(biāo)題頁</title>

  6.     <style type='text/css'>

  7.     .zhoufoxcn

  8.     {

  9.     color:#0000C0;

  10.     background-color:Olive;

  11.     border-color:Red;

  12.     border-style:Dotted;

  13.     }

  14.     .redfoxcn

  15.     {

  16.     color:red;

  17.     background-color:Olive;

  18.     border-color:#0000C0;

  19.     border-style:Dotted;

  20.     }

  21.     </style>

  22. </head>

  23. <body>

  24.     <form id='form1' runat='server'>

  25.     <div>

  26.     <table border='0' width='100%'>

  27.     <tr><td>

  28.         用戶名</td><td>

  29.         <asp:TextBox ID='txtUserName' runat='server'></asp:TextBox></td></tr>

  30.     <tr><td>

  31.         密碼</td><td>

  32.         <asp:TextBox ID='txtPassword' runat='server' TextMode='Password'></asp:TextBox></td></tr>

  33.     <tr><td>

  34.         簡單介紹</td><td>

  35.         <asp:TextBox ID='TextBox3' runat='server' TextMode='MultiLine'></asp:TextBox></td></tr>

  36.     <tr><td>

  37.         </td><td></td></tr>

  38.     <tr><td><asp:Button ID='btnOK' runat='server' Text='Click' OnClientClick='javascript:return confirm('確認(rèn)提交?')' OnClick='btnOK_Click' CssClass='zhoufoxcn' /></td><td>

  39.         <asp:Button ID='btnCommand' runat='server'

  40.             Text='Command' OnCommand='btnCommand_Command' CommandArgument='1' CssClass='redfoxcn' /></td></tr>

  41.     </table>

  42.     </div>

  43.     </form>

  44. </body>

  45. </html>

運行之后,我們在每個文本框都輸入“zhoufoxcn”,結(jié)果如下:

 
另外TextBox控件還有一個屬性:AutoPostBack。這個屬性默認(rèn)是false,即控件的值發(fā)生變化時不會自動自動發(fā)生提交,如果為true就會自動向服務(wù)器提交(當(dāng)控件失去焦點的時候向服務(wù)器提交),并且它還有一個事件TextChanged專門用來處理TextBox中的文本變化的情況的。
再對上面的代碼變化一下,設(shè)置ID為“txtUserName”的控件的AutoPostBack屬性為true,如下:

  1. <%@ Page Language='C#' AutoEventWireup='true' CodeFile='ServerControl.aspx.cs' Inherits='ServerControl' %>

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

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

  4. <head runat='server'>

  5.     <title>無標(biāo)題頁</title>

  6.     <style type='text/css'>

  7.     .zhoufoxcn

  8.     {

  9.     color:#0000C0;

  10.     background-color:Olive;

  11.     border-color:Red;

  12.     border-style:Dotted;

  13.     }

  14.     .redfoxcn

  15.     {

  16.     color:red;

  17.     background-color:Olive;

  18.     border-color:#0000C0;

  19.     border-style:Dotted;

  20.     }

  21.     </style>

  22. </head>

  23. <body>

  24.     <form id='form1' runat='server'>

  25.     <div>

  26.     <table border='0' width='100%'>

  27.     <tr><td>

  28.         用戶名</td><td>

  29.         <asp:TextBox ID='txtUserName' runat='server' AutoPostBack='True' OnTextChanged='txtUserName_TextChanged'></asp:TextBox></td></tr>

  30.     <tr><td>

  31.         密碼</td><td>

  32.         <asp:TextBox ID='txtPassword' runat='server' TextMode='Password'></asp:TextBox></td></tr>

  33.     <tr><td>

  34.         簡單介紹</td><td>

  35.         <asp:TextBox ID='txtIntroduce' runat='server' TextMode='MultiLine'></asp:TextBox></td></tr>

  36.     <tr><td>

  37.         </td><td></td></tr>

  38.     <tr><td><asp:Button ID='btnOK' runat='server' Text='Click' OnClientClick='javascript:return confirm('確認(rèn)提交?')' OnClick='btnOK_Click' CssClass='zhoufoxcn' /></td><td>

  39.         <asp:Button ID='btnCommand' runat='server'

  40.             Text='Command' OnCommand='btnCommand_Command' CommandArgument='1' CssClass='redfoxcn' /></td></tr>

  41.     </table>

  42.     </div>

  43.     </form>

  44. </body>

  45. </html>

雙擊ID為“txtUserName”的這個控件,就會自動產(chǎn)生一個事件,在這個事件中編寫處理代碼,如下:

  1. using System;

  2. using System.Data;

  3. using System.Configuration;

  4. using System.Collections;

  5. using System.Web;

  6. using System.Web.Security;

  7. using System.Web.UI;

  8. using System.Web.UI.WebControls;

  9. using System.Web.UI.WebControls.WebParts;

  10. using System.Web.UI.HtmlControls;

  11. public partial class ServerControl : System.Web.UI.Page

  12. {

  13.     protected void Page_Load(object sender, EventArgs e)

  14.     {

  15.     }

  16.     protected void btnOK_Click(object sender, EventArgs e)

  17.     {

  18.         Response.Write('發(fā)生了Click事件。');

  19.     }

  20.     protected void btnCommand_Command(object sender, CommandEventArgs e)

  21.     {

  22.         Response.Write('發(fā)生了Command事件,事件的數(shù)據(jù)是:' + e.CommandArgument.ToString());

  23.     }

  24.     protected void txtUserName_TextChanged(object sender, EventArgs e)

  25.     {

  26.         Response.Write('當(dāng)前輸入的用戶名是:' + txtUserName.Text);

  27.     }

  28. }


當(dāng)我們在用戶名文本框輸入用戶名,并將光標(biāo)從用戶名文本框移開時,會出現(xiàn)如下情況:

 
也就是當(dāng)用戶光標(biāo)移開用戶名輸入框時,會自動提交表單并由它在服務(wù)器端定義的方法處理。這樣可以及時將反饋顯示給用戶,不過缺點是需要將整個表單提交給服務(wù)器,然后整頁面發(fā)送到客戶端瀏覽器,降低了服務(wù)器的處理效率,也加大了網(wǎng)絡(luò)數(shù)據(jù)傳輸。對一些小型站點可以這么做,如果是大型網(wǎng)站就需要采用Ajax方法來處理了,這也是為什么Visual Studio 2005中默認(rèn)這個屬性為false的原因了。

Web服務(wù)器控件的特殊客戶端事件
我們知道Web服務(wù)器控件最終會解釋成普通HTML控件到客戶端瀏覽器,比如TextBox這個Web服務(wù)器控件最終在客戶端瀏覽器呈現(xiàn)為文本輸入框控件、密碼輸入框控件或者文本框控件,這個由TextBox的TextMode屬性來決定。用Web服務(wù)器控件有一個缺點就是很多時候我們沒有辦法獲得它解釋成客戶端控件之后的客戶端事件。
下面是文本輸入框控件在客戶端的事件(下圖截取自Dreamweaver 8編輯器):

 
我們可以看到文本框控件有很多客戶端事件。再看看對應(yīng)的TextBox控件擁有的事件智能提示:
 
從上面的截圖中可以看到TextBox控件也擁有很多事件,但是這些事件不是客戶端的,而是服務(wù)器端的。
我們先寫一個HTML文件,代碼如下:

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

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

  3. <head>

  4. <meta http-equiv='Content-Type' content='text/html; charset=gb2312' />

  5. <title>HTML控件的客戶端事件</title>

  6. <script language='javascript'>

  7. //下面的方法根據(jù)敲擊鍵盤的ASCII碼值來判斷是否敲擊了數(shù)字鍵

  8. //數(shù)字鍵的ASCII碼值介于48到57之間,分別對應(yīng)數(shù)字0到9

  9. //當(dāng)方法返回true的時候敲入的字符才能顯示

  10. function judgeNumber(code)

  11. {

  12.  //alert(code);

  13.  if(code>=48&<=57)

  14.  {

  15.   return true;

  16.  }

  17.  else

  18.  {

  19.   return false;

  20.  }

  21. }

  22. //英文字母A-Z的ASCII碼值65-90,a-z的ASCII碼值是97-122

  23. //當(dāng)方法返回true的時候敲入的字符才能顯示

  24. function judgeChar(code)

  25. {

  26.  //alert(code);

  27.  if((code>=65&<=90)||(code>=97&<=122))

  28.  {

  29.   return true;

  30.  }

  31.  else

  32.  {

  33.   return false;

  34.  }

  35. }

  36. </script>

  37. </head>

  38. <body>

  39. <form>

  40. 數(shù)字:<input type='text' name='userName' onkeypress='return judgeNumber(event.keyCode);' /><br/>

  41. 字母:<input type='text' name='password' onkeypress='return judgeChar(event.keyCode);' />

  42. </form>

  43. </body>

  44. </html>

這個頁面的運行效果如下:

 
上面的頁面效果是:第一個文本框只能輸入數(shù)字,第二個文本框只能大小寫字母。我們能知道TextBox如果TextMode是SingleLine的話(這個是默認(rèn)值,無需手動添加),最后在客戶端瀏覽器也是普通文本框,那么我們可不可以給TextBox控件加上上面的效果呢?答案是可以的。
在Visual Studio 2005新建一個名為“TextBoxClient”頁面窗體,在源視圖中粘貼如下代碼:

  1. <%@ Page Language='C#' AutoEventWireup='true' CodeFile='TextBoxClient.aspx.cs' Inherits='TextBoxClient' %>

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

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

  4. <head runat='server'>

  5.     <title>無標(biāo)題頁</title>

  6.     <script language='javascript' type='text/javascript'>

  7. //下面的方法根據(jù)敲擊鍵盤的ASCII碼值來判斷是否敲擊了數(shù)字鍵

  8. //數(shù)字鍵的ASCII碼值介于48到57之間,分別對應(yīng)數(shù)字0到9

  9. //當(dāng)方法返回true的時候敲入的字符才能顯示

  10. function judgeNumber(code)

  11. {

  12.  //alert(code);

  13.  if(code>=48&<=57)

  14.  {

  15.   return true;

  16.  }

  17.  else

  18.  {

  19.   return false;

  20.  }

  21. }

  22. //英文字母A-Z的ASCII碼值65-90,a-z的ASCII碼值是97-122

  23. //當(dāng)方法返回true的時候敲入的字符才能顯示

  24. function judgeChar(code)

  25. {

  26.  //alert(code);

  27.  if((code>=65&<=90)||(code>=97&<=122))

  28.  {

  29.   return true;

  30.  }

  31.  else

  32.  {

  33.   return false;

  34.  }

  35. }

  36. </script>

  37. </head>

  38. <body>

  39.     <form id='form1' runat='server'>

  40.     <div>

  41.         數(shù)字:<asp:TextBox ID='TextBox1' runat='server' onkeypress='return judgeNumber(event.keyCode);'></asp:TextBox><br />

  42.         字母:<asp:TextBox ID='TextBox2' runat='server' onkeypress='return judgeChar(event.keyCode);'></asp:TextBox></div>

  43.     </form>

  44. </body>

  45. </html>

上面的程序在客戶端的最終效果和用普通HTML控件的效果一樣,只不過在Visual Studio 2005源視圖會得到如圖所示的提示:

 
好在只是綠色波浪線,表示警告,所以還是能通過編譯并且能運行的,如果是紅色波浪線表示是錯誤,就沒有辦法運行了。對于Visual Studio 2005來說,它并不認(rèn)識那些javascript客戶端事件,盡管警告,不過它還是照原樣輸出了,到了客戶端就成了普通HTML控件,瀏覽器能識別這些,所以能正確運行。

FileUpload控件
FileUpload控件是一個很重要的控件,它被Web服務(wù)器最終解釋為形如“<input type=”file”…/>”這樣的普通HTML控件。
它有如下常見屬性:

屬性名數(shù)據(jù)類型說明
FileBytesbyte[]上傳的文件內(nèi)容的字節(jié)數(shù)組表示形式
FileContentStream上傳文件的數(shù)據(jù)流
FileNamestring上傳文件在客戶端的名字
HasFilebool 指示是否上傳了文件
PostedFileHttpPostedFile獲取文件基礎(chǔ)的HttpPostedFile對象

  
這個HttpPostedFile對象能幫我們做很多工作,它也有一些有用的常見屬性:

屬性名數(shù)據(jù)類型說明
ContentLengthint上傳的文件內(nèi)容的字節(jié)長度
ContentTypestring上傳文件的MIME 內(nèi)容類型
FileNamestring上傳文件的在客戶端的名字
InputStreamStream指向上傳文件的Stream對象
  

FileUpload控件還有一個void SaveAs (string filename)的方法,這個方法用于將上傳的文件保存到服務(wù)器上。一般來說,使用FileUpload控件上傳文件一般有如下幾個步驟:
(1)利用HasFile屬性判斷是否上傳了文件。
(2)在服務(wù)器上指定一個物理路徑,并檢查這個物理路徑是否存在,如果不存在則先創(chuàng)建。
(3)指定上傳文件在服務(wù)器上的上傳路徑,利用SaveAs()保存上傳的文件。這一步還可以做一些其它檢查工作,比如檢查上傳的文件格式是否符合要求或文件內(nèi)容大小是否符合要求。
(4)將相對路徑或者URL地址保存起來,以便客戶訪問或者下載。
這里要著重強調(diào)的是:我們保存上傳的時候保存文件用的是物理路徑,但是要保存的、日后客戶端能訪問得到的卻是相對路徑或者URL地址。
下面是一個簡單的例子,這個頁面叫Upload.aspx,它的源視圖代碼如下:

  1. <%@ Page Language='C#' AutoEventWireup='true' CodeFile='Upload.aspx.cs' Inherits='Upload' %>

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

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

  4. <head runat='server'>

  5.     <title>文件上傳的例子</title>

  6. </head>

  7. <body>

  8.     <form id='form1' runat='server'>

  9.     <div>

  10.         <asp:FileUpload ID='fileUpload' runat='server' />

  11.         <asp:Button ID='btnUpload' runat='server' OnClick='btnUpload_Click' Text='上傳' />

  12.         <asp:Literal ID='literal' runat='server'></asp:Literal></div>

  13.     </form>

  14. </body>

  15. </html>

后臺cs代碼如下:

  1. using System;

  2. using System.Data;

  3. using System.Configuration;

  4. using System.Collections;

  5. using System.Web;

  6. using System.Web.Security;

  7. using System.Web.UI;

  8. using System.Web.UI.WebControls;

  9. using System.Web.UI.WebControls.WebParts;

  10. using System.Web.UI.HtmlControls;

  11. public partial class Upload : System.Web.UI.Page

  12. {

  13.     protected void Page_Load(object sender, EventArgs e)

  14.     {

  15.     }

  16.     protected void btnUpload_Click(object sender, EventArgs e)

  17.     {

  18.         //判斷是否上傳了文件

  19.         if (fileUpload.HasFile)

  20.         {

  21.             //指定上傳文件在服務(wù)器上的保存路徑

  22.             string savePath = Server.MapPath('~/upload/');

  23.             //檢查服務(wù)器上是否存在這個物理路徑,如果不存在則創(chuàng)建

  24.             if (!System.IO.Directory.Exists(savePath))

  25.             {

  26.                 //需要注意的是,需要對這個物理路徑有足夠的權(quán)限,否則會報錯

  27.                 //另外,這個路徑應(yīng)該是在網(wǎng)站之下,而將網(wǎng)站部署在C盤卻把上傳文件保存在D盤

  28.                 System.IO.Directory.CreateDirectory(savePath);

  29.             }

  30.             savePath = savePath + '//' + fileUpload.FileName;

  31.             fileUpload.SaveAs(savePath);//保存文件

  32.             //不過需要注意的是,在客戶端訪問卻需要指定的是URL地址,而不是在服務(wù)器上的物理地址

  33.             literal.Text = string.Format('<a href='upload/{0}'>upload/{0}</a>', fileUpload.FileName);

  34.         }

  35.     }

  36. }

 以下是程序運行結(jié)果:


上傳文件之后的效果:
 
因為我上傳了一個proc.txt的文件,所以最后的URL地址是:upload/proc.txt,點擊這個超級鏈接能打開剛剛上傳的文件查看其內(nèi)容,如下圖:
 
注意:對于有些文件,如rar格式的,點擊之后則會出現(xiàn)下載提示而不是直接在瀏覽器打開。

帶圖片預(yù)覽功能的FileUpload控件
通過上面的講述,我們知道一些web服務(wù)器控件在vs2005下沒有javascript客戶端事件的提示,不過只要我們確信這個事件對應(yīng)的HTML控件確實有,我們可以自行添加的,下面我們就來做一個讓FileUpload控件帶有圖片預(yù)覽功能的例子。
因為這里不涉及到上傳后如何保存,只是僅僅在用戶選擇了要上傳的文件時或者用戶將鼠標(biāo)移動到上傳控件上時,如果上傳的文件是圖片文件,我們就顯示這個圖片的預(yù)覽效果5分鐘,然后消失。以下是程序代碼(前臺代碼,保存代碼和上面的例子一樣,所以沒有寫后臺cs代碼):

  1. <%@ Page Language='C#' %>

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

  3. <script runat='server'>

  4. </script>

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

  6. <head runat='server'>

  7.     <title>上傳圖片預(yù)覽實例</title>

  8.     <script type='text/javascript' language='javascript'>

  9. //如果用戶選擇了圖片,則顯示圖片的預(yù)覽效果

  10. function previewImage()

  11. {

  12.   var x = document.getElementById('file');

  13.   if(!x || !x.value)//如果沒有選擇上傳文件

  14.   {

  15.      return;

  16.    }

  17.     var patn = //.jpg$|/.jpeg$|/.gif$/i;

  18.     if(patn.test(x.value))//如果上傳文件的后綴是.jpg或.jpeg或.gif

  19.     {    

  20.         var y = document.getElementById('img');

  21.         if(y)

  22.         {      

  23.             y.src = 'file://localhost/' + x.value;

  24.             y.style.display='block'; 

  25.         }

  26.         else

  27.         {

  28.             var img=document.createElement('img');      

  29.             img.setAttribute('src','file://localhost/'+x.value);      

  30.             img.setAttribute('width','120');      

  31.             img.setAttribute('height','90');      

  32.             img.setAttribute('id','img');      

  33.             document.getElementById('form1').appendChild(img);      

  34.         }

  35.         setTimeout('hidden()',5000); //5秒之后執(zhí)行隱藏圖片的javascript方法

  36.     }

  37.     else

  38.     {    

  39.         alert('您選擇的似乎不是圖像文件。');  

  40.     }

  41. }

  42. //隱藏照片

  43. function hidden()

  44. {

  45.     var y = document.getElementById('img');

  46.     if(y)

  47.     {

  48.         document.getElementById('img').style.display='none';

  49.     }

  50. }

  51. </script>

  52. </head>

  53. <body>

  54.     <form id='form1' runat='server'>

  55.     <div>

  56.          <asp:FileUpload ID='file' runat='server' onchange='previewImage()' onmouseover='previewImage()' />

  57.         <asp:Button ID='btnUpload' runat='server' Text='上傳' /></div>

  58.     </form>

  59. </body>

  60. </html>

說明一下,在這個頁面里form表單的id是form1,上傳控件的id是file,所以在客戶端用到了document.getElementById()這個方法來獲取相關(guān)的控件的屬性值,并且通過javascript腳本動態(tài)添加了一個<img id=”img”>的控件,然后我們操縱它的src屬性來決定顯示哪張圖片,利用它的style.display屬性來決定是否顯示。
以下預(yù)覽時的效果:

預(yù)覽5秒鐘之后,不再帶有預(yù)覽功能的效果:

注意:如果我們要上傳文件,需要給表單增加enctype='multipart/form-data'屬性,如果我們使用了FileUpload控件時,生成HTML代碼時表單會自動加上這個屬性。

Literal控件
Literal控件是一個類似于Label控件的控件,都是用來呈現(xiàn)文字的。前面我說過,雖然通過Response.Write()方法可以直接輸出文字,但是這樣輸出的文字有可能在<html></html>標(biāo)記之外,破壞了網(wǎng)頁的結(jié)構(gòu),使之不再符合XHTML標(biāo)準(zhǔn)。
對于靜態(tài)文字,我們可以直接在HTML代碼中書寫即可,而沒有必要使用Literal 控件或 Label 控件。但是在某些情況下我們卻希望在某個位置設(shè)置一些文字,那么我們就可以先在期望輸出文字的地方放置一個Literal控件,將來在程序代碼中根據(jù)程序邏輯動態(tài)設(shè)置Literal控件的Text屬性來控制要輸出的文字。
盡管在某種程度上,Literal 控件用法與 Label 控件用法類似,但是不同的是 Literal 控件不能用于將css樣式應(yīng)用于顯示的文本。
另外Literal 控件還有一個Mode屬性,它用來控制如何呈現(xiàn)Literal 控件中的內(nèi)容。這個屬性是一個枚舉,有三個枚舉值:
PassThrough:直接呈現(xiàn)Literal 控件中的內(nèi)容。
Encode:控件的內(nèi)容轉(zhuǎn)換為 HTML 編碼的字符串。
Transform:從控件的內(nèi)容中移除不受支持的標(biāo)記語言元素。如果 Literal 控件在支持 HTML 或 XHTML 的瀏覽器上呈現(xiàn),則不會修改該控件的內(nèi)容。
舉例說明,假如Literal的Text屬性為“<abc>http://blog.csdn.net/zhoufoxcn</abc>”,即如下代碼:

  1.  <table border='1' width='600' cellpadding='1' cellspacing='1'>

  2.         <tr><td>

  3.                 Mode</td><td>

  4.           效果</td></tr>

  5.         <tr><td>

  6.             PassThrough</td><td>

  7.             <asp:Literal ID='Literal1' runat='server' Mode='PassThrough' Text='<abc>http://blog.csdn.net/zhoufoxcn</abc>'></asp:Literal></td></tr>

  8.         <tr><td>

  9.             Encode</td><td>

  10.             <asp:Literal ID='Literal2' runat='server' Mode='Encode' Text='<abc>http://blog.csdn.net/zhoufoxcn</abc>'></asp:Literal></td></tr>

  11.         <tr><td>

  12.             Transform</td><td>

  13.             <asp:Literal ID='Literal3' runat='server' Text='<abc>http://blog.csdn.net/zhoufoxcn</abc>'></asp:Literal></td></tr>

  14.         </table>

在瀏覽器的效果如下:

 
它們生成相關(guān)HTML代碼如下:

  1. <table border='1' width='600' cellpadding='1' cellspacing='1'>

  2.         <tr><td>

  3.                 Mode</td><td>

  4.           效果</td></tr>

  5.         <tr><td>

  6.             PassThrough</td><td>

  7.             <abc>http://blog.csdn.net/zhoufoxcn</abc></td></tr>

  8.         <tr><td>

  9.             Encode</td><td>

  10.             <abc>http://blog.csdn.net/zhoufoxcn</abc></td></tr>

  11.         <tr><td>

  12.             Transform</td><td>

  13.             <abc>http://blog.csdn.net/zhoufoxcn</abc></td></tr>

  14.         </table>

在瀏覽器中查看的時候,PassThrough 和Transform模式的效果是一樣的,但是如果用智能設(shè)備查看的時候,PassThrough在客戶端的代碼仍然是<abc>http://blog.csdn.net/zhoufoxcn</abc>,而Transform模式在客戶端的代碼是http://blog.csdn.net/zhoufoxcn,要注意這個差別,Literal控件Mode屬性默認(rèn)是Transform模式。

Panel控件
Panel控件是一個容器控件,用來存儲一組容器控件,它常用來存放一組業(yè)務(wù)邏輯上相似的控件組。下面看一個例子,這個例子里會根據(jù)用戶選擇的性別動態(tài)決定對象配偶的名字,如果是男性則讓填寫妻子的名字,如果是女性則讓填寫丈夫的名字,源視圖代碼如下:

  1. <%@ Page Language='C#' AutoEventWireup='true' CodeFile='PanelDemo.aspx.cs' Inherits='PanelDemo' %>

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

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

  4. <head runat='server'>

  5.     <title>無標(biāo)題頁</title>

  6. </head>

  7. <body>

  8.     <form id='form1' runat='server'>

  9.     <div>

  10.         性別:<asp:RadioButton ID='rbMale' runat='server' AutoPostBack='True' Checked='True' OnCheckedChanged='RadioButton_CheckedChanged' Text='男' GroupName='sex' />

  11.         <asp:RadioButton ID='rbFemale' runat='server' Text='女' AutoPostBack='True' GroupName='sex' OnCheckedChanged='RadioButton_CheckedChanged' /><br />

  12.         <asp:Panel ID='pMale' runat='server' Height='50px' Width='125px'>

  13.         妻子姓名:<asp:TextBox ID='TextBox1' runat='server'></asp:TextBox>

  14.         </asp:Panel>

  15.         </div>

  16.         <asp:Panel ID='pFemale' runat='server' Height='50px' Width='125px' Visible='False'>

  17.         丈夫姓名:<asp:TextBox ID='TextBox2' runat='server'></asp:TextBox>

  18.         </asp:Panel>

  19.     </form>

  20. </body>

  21. </html>


在這里我們用了兩個RadioButton控件,并且設(shè)置了它們的GroupName屬性都為“sex”,表示這兩個RadioButton屬于一個分組,它們之中只能有一個處于選中狀態(tài),另外我們還設(shè)置了這兩個RadioButton控件的AutoPostBack屬性都為“true”,表示當(dāng)它們的選擇狀態(tài)發(fā)生變化的時候,將會自動提交到服務(wù)器進(jìn)行處理,并且對于它們在服務(wù)器端的處理都都使用了同一個方法RadioButton_CheckedChanged,后臺代碼如下:

  1. using System;

  2. using System.Data;

  3. using System.Configuration;

  4. using System.Collections;

  5. using System.Web;

  6. using System.Web.Security;

  7. using System.Web.UI;

  8. using System.Web.UI.WebControls;

  9. using System.Web.UI.WebControls.WebParts;

  10. using System.Web.UI.HtmlControls;

  11. public partial class PanelDemo : System.Web.UI.Page

  12. {

  13.     protected void Page_Load(object sender, EventArgs e)

  14.     {

  15.     }

  16.     protected void RadioButton_CheckedChanged(object sender, EventArgs e)

  17.     {

  18.         //如果選擇的性別是“男”,則讓填寫妻子的姓名

  19.         if (rbMale.Checked)

  20.         {

  21.             pMale.Visible = true;

  22.             pFemale.Visible = false;

  23.         }

  24.         else//否則讓填寫丈夫的姓名

  25.         {

  26.             pMale.Visible = false;

  27.             pFemale.Visible = true;

  28.         }

  29.     }

  30. }


程序的運行效果如下:

 
選擇“女”之后的變化:
 

我們可以查看Panel控件生成的代碼:

  1. <div>

  2.         性別:<input id='rbMale' type='radio' name='sex' value='rbMale' checked='checked' /><label for='rbMale'>男</label>

  3.         <input id='rbFemale' type='radio' name='sex' value='rbFemale' onclick='javascript:setTimeout('__doPostBack(/'rbFemale/',/'/')', 0)' /><label for='rbFemale'>女</label><br />

  4.         <div id='pMale' style='height:50px;width:125px;'>

  5.         妻子姓名:<input name='TextBox1' type='text' id='TextBox1' />

  6. </div>

  7.         </div>

  8. <div>

上面的代碼是當(dāng)選擇“男”的時候生成的代碼,可見對于Panel控件在客戶端的代碼為一個<div>標(biāo)記。

PlaceHolder控件
PlaceHolder控件控件的作用和Panel控件的作用非常類似,也是用作容器控件,不過控件本身在客戶端不產(chǎn)生任何可見HTML標(biāo)記。
PlaceHolder控件有一個Controls屬性,這個屬性表示這個容器控件容納的控件的集合,Controls屬性是ControlCollection類的一個實例,這個類用Add()方法向集合中增加控件,用Remove()刪除控件,還有一個Count屬性表示這個集合中總共有多少個控件。

下面是一個PlaceHolder控件用法的例子,為了簡單起見,我沒有采用代碼和頁面分離的模式,代碼如下:

  1. <%@ Page Language='C#' %>

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

  3. <script runat='server'>

  4.     protected void Page_Load(object sender, EventArgs e)

  5.     {

  6.         Button btn = new Button();

  7.         btn.Text = '動態(tài)添加的控件';

  8.         btn.Click += new EventHandler(btn_Click);//給動態(tài)添加的Button的單擊事件增加服務(wù)器端方法

  9.         PlaceHolder1.Controls.Add(btn);

  10.     }

  11.     public void btn_Click(object sender, EventArgs e)

  12.     {

  13.         Literal l = new Literal();

  14.         l.Text = 'PlaceHolder1控件總共容納了' + PlaceHolder1.Controls.Count + '個控件';

  15.         PlaceHolder1.Controls.Add(l);

  16.     }

  17. </script>

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

  19. <head runat='server'>

  20.     <title>無標(biāo)題頁</title>

  21. </head>

  22. <body>

  23.     <form id='form1' runat='server'>

  24.     <div>

  25.         <asp:PlaceHolder ID='PlaceHolder1' runat='server'></asp:PlaceHolder>

  26.     </div>

  27.     </form>

  28. </body>

  29. </html>

程序的運行結(jié)果:

 
點擊按鈕之后的效果:
 
在沒有點擊按鈕之前客戶端瀏覽器得到的HTML代碼如下:

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

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

  3. <head><title>

  4.  無標(biāo)題頁

  5. </title></head>

  6. <body>

  7.     <form name='form1' method='post' action='PlaceHolderDemo.aspx' id='form1'>

  8. <div>

  9. <input type='hidden' name='__VIEWSTATE' id='__VIEWSTATE' value='/wEPDwUKLTM2NTY5NjE1NWRkDxPVOfW9ygVx0MnTmn1nNCXGfWY=' />

  10. </div>

  11.     <div>

  12.         <input type='submit' name='ctl02' value='動態(tài)添加的控件' />PlaceHolder1控件總共容納了1個控件

  13.     </div>

  14. <div>

  15.  <input type='hidden' name='__EVENTVALIDATION' id='__EVENTVALIDATION' value='/wEWAgLhoKDXAwKfwImNCxlfxrs8MWJR7ujk/rFzZ1UfCrph' />

  16. </div></form>

  17. </body>

  18. </html>

小結(jié):Panel和PlaceHolder作為控件的容器,在很多地方是相似的,不同的是PlaceHolder不會在客戶端產(chǎn)生任何可見的輸出,而Panel還可以設(shè)置背景圖片等。
Label和Literal控件常用來顯示文字(也可以成為文本的容器哦),在很多地方是相似的,不過不能設(shè)置Literal的客戶端css樣式,并且Literal對顯示的文本的控制能力更靈活一些,利用Mode屬性可以方便地顯示HTML代碼。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
ASP.NET Web 頁面語法概覽
標(biāo)題:ASP.NET 2.0服務(wù)器控件與form runat=server標(biāo)記
Web打印控件smsx.cab使用說明
asp.net 給用戶控件增加事件和屬性
ScriptManager 類
asp.net控件開發(fā)基礎(chǔ)(2)
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服