Web服务器控件和HTML控件的区别与联系
屬于 System.Web.UI.WebControls 命名空間的 ASP.NET 服務器控件。Web 服務器控件比 HTML 服務器控件更豐富、更抽象。Web 服務器控件在 ASP.NET 頁上有 asp 標記前綴,例如 <asp:Button runat="server" />。
HTML控件直接映射到 HTML 元素。
HTML控件可以通過修改代碼將其變成Web服務器端控件,幾乎所有的HTML標記只要加上runat = "server",這個服務器控件標識屬性后都可以變成服務器端控件。這與普通HTML標記相比最大的區別在于,服務器端控件可以通過服務器端代碼來控制。
?
【WEB服務器控件是HTML控件的一種擴展】,區別是:? 1)前者可以觸發服務器控件特有的事件,后者只能通過回遞的方式觸發服務器上的頁面級事件。 2)輸入到前者中的數據在請求之間可以維護(即具有狀態管理功能),而后者無法自動維護數據,只能使用頁面級的腳本來保存和恢復。 3)前者可以自動檢測瀏覽器并調整到恰當的顯示,而后者沒有自動適應功能,必須在代碼中手動檢測瀏覽器。 4)每個服務器控件都具有一組屬性,可以在服務器端的代碼中更改控件的外觀和行為,而后者只有HTML屬性。
區別是在響應客戶端請求時所返回結果,點擊某個WEN服務器控件在發送請求的時候,所返回來的是整個頁面, 而HTML控件則是點擊某個控件,結果返回在只是一些與之相關聯的地方,不會整個頁面在重新獲取 ?所有如果某些控件不需要服務器端的事件或狀態管理功能時,可以選擇HTML控件,這樣可以提高應用程序的性能。
ASP.NET中html控件和web控件?雖然好多功能相同并且長得很像 ,但是它們的內部實現機制是完全不一樣的 ,Web控件要比Html控件執行效率要好?
???
?? 1. 使用起來也相當方便,舉個簡單的例子,例如Button的生成:?
?? Html控件是將龐大控件集合全部弄到頁面中,用到哪個功能,就設置一下屬性,如下:?
?? <input type=submit/button runat=server>?
?? 這樣會占用相當大的控件資源?
???
?? Web控件是將集成式的拆解成單功能的:?
?? <asp:button id="btnOK" />?
?? 這樣就可以節省不必要的控件所占用的資源了?
???
?? 2.Web控件具有回送功能,能夠用ViewState維持控件的狀態.?
??? Html控件則不能,當點擊頁面的操作,其狀態就會丟失.?
??? 可以做這樣的一個實驗:?
??? I. 分別建立兩個文件: a.html b.aspx?
??? II.在a.html頁面中加Html控件的RadioButton和一個button,?
??? 在b.aspx中加Web控件的RadioButton和一個button?
??? III.a.html直接雙擊瀏覽器運行,b.aspx通過IIS運行?
??? IV.在a.html運行界面中,選中RadioButton,再單擊Button按鈕,會發現RadioButton會?
??? 取消選中(丟失其狀態),但在b.aspx頁面執行同樣的操作,RadioButton不會丟失,因為ViewState?
??? 給它保存了狀態. 您可以在運行界面點擊瀏覽器菜單"查看"->“源文件",打開Html代碼文件,?
??? 找到加密后的ViewState,類似于下面:?
??? <input type="hidden" name="_VIEWSTATE" value="dDw0ajfmafmjfzzmj4"/>?
??? 其實ViewState實現原理也是將一些信息放到隱藏的一個控件中,并且asp.net生成的ViewState信息?
???
??? 是存儲在客戶端的?
??? 這里要注意的一點是:?
??? 只有當格式為*.aspx文件,并且控件具有屬性:"runat=server"時,回送功能才能打開?
???
???
?? 3. Html控件與Web控件最大的區別是它們對事件處理的方法不同。對于Html窗體控件,?
?? 當引發一個事件時,瀏覽器會處理它。但對于Web控件,事件僅由瀏覽器生成,但瀏覽?
?? 器不會處理它,客戶端要給服務器發個信息,告訴服務器處理事件。 不過有些事件,?
?? 比如:?
??? 按下鍵/移動/鼠標等事件,Asp.net中沒有這些事件?
??? (因為這些事件即時性強,服務器處理得不夠及時),這時候Html控件就發揮其作用了,結合Html事件?
???
??? 協助完成.?
???
?? 如下是一些Html常用的事件:?
?? 在瀏覽器上執行的Html控件事件:?
???
?? 單擊時觸發:?
?? <INPUT type="button" value="Click Me" οnclick="alert('Hi,你好!');">?
???
?? 鼠標彈起時觸發:?
?? <INPUT type="button" value="Click Me" οnmοuseup="alert('Hi,你好!');">?
???
?? //懸浮在控件上方時觸發?
?? <INPUT type="button" value="Click Me" οnmοuseοver="alert('Hi,你好!');">?
???
?? //鼠標在控件上方移動時觸發?
?? <INPUT type="button" value="Click Me" οnmοusemοve="alert('Hi,你好!');">?
???
?? //雙擊控件時觸發?
?? <INPUT type="button" value="Click Me" οndblclick="alert('Hi,你好!');">?
???
?? //當焦點在控件時,按鍵時觸發?
?? <INPUT type="button" value="Click Me" οnkeypress="alert('Hi,你好!');">?
???
?? //按鍵按下時觸發?
?? <INPUT type="button" value="Click Me" οnkeydοwn="alert('Hi,你好!');">??
在不需要與后臺進行交互時就使用HTML控件,它的占用的資源比較少,速度也比較快,在需要與后臺進行交互時,就使用WEB控件,或者在HTML ? 控件上加上runat="server" ? 也可以將一個HTML控件轉換成交互控件,但這樣占用的資源就和Web控件沒任何分別了。?
?????? WEB控件可以響應服務器端事件,可以在后臺代碼中設置相關屬性和方法等!HTML不可, WEB服務器控件需要通過服務器處理后譯為HTML控件再發送給瀏覽器,所以比較耗費服務器資源,并由于有IEWSTATE,所以在回送的時候會保持控件狀態(也可以設置不保存)也因此增加了回送信息量。HTML直接發送到瀏覽器,不另耗費服務器資源,但無狀態保存!????
?????? 獲得HTML控件的值 ? 需要使用REQUEST的FORM ? 方法,WEB控件就可以直接通過屬性直接處理!???
?所以,一般來說,對于不需要保存控件狀態,并無什么對值處理的地方就可以使用HTML 如果需要對控件進行動態的處理,或要保存其狀態等 ? 就可以WEB服務器控件!WEB服務器控件用起來個人認為要方便些,但是就是另外多耗費服務器資源!???
????很多書上都說,考慮性能的話在能不用WEB服務器控件的地方就盡量不用。????
??? 什么時候用什么時候不用還是要看具體情況,在條件寬松的情況下就看個人習慣了
?
?
【轉】http://bbs.blueidea.com/thread-401431-1-1.html
一、HTML控件介紹?
HTML控件在ASP.NET編程中具有主要位置,由于其簡單和HTML的相似性,很多時候,我們可以使用HTML控件來代替WEB控件。在ASP.NET中,HTML控件一共有20種,它們之間的相互關系如下:?
轉存失敗重新上傳取消轉存失敗重新上傳取消轉存失敗重新上傳取消
二、HTML控件的使用?
HTML控件的使用簡單,重要在于靈活使用。HTML和ASP的使用,讓我們養成了一些不是太好的習慣,包括代碼的編寫,甚至已經完全脫離了面向對象編程,現在,我們使用HTML控件,慢慢的必須回到面向對象編程的編碼習慣和思路。HTML控件比較多,我們現在挑選比較常用和實用的幾個控件舉例介紹。?
1、HTMLAnchor控件?
在ASP中,我們建立一個鏈接是這樣的<a href=”鏈接URL”>鏈接文字</a>。這樣建立的一個鏈接,如果不和JavaScript結合的話,唯一的功能就是一個鏈接,而且,這個鏈接不能有任何特殊一點的功能。現在,我們來看使用HTMLAnchor實現一個JavaScript中常見的程序,就是用戶點擊鏈接以后,鏈接文字變成別的文字。以下程序點擊“點擊我”以后,鏈接文字變為“歡迎你”。程序代碼如下:?
<%@ Page Language="vb"%>?
<%@ Import Namespace="System.Data" %>?
<script runat="server" language="VB">?
Sub btnclk(Sender as Object,E as EventArgs)?
a1.InnerText="歡迎你"?
End Sub?
</Script>?
<Form RunAt="Server">?
<A id="a1" RunAt="Server" onServerClick="btnclk">點擊我</A>?
</Form>?
在以上的代碼中,鏈接有了事件處理!這樣,在鏈接點擊以后,我們可以做一些必要的處理。需要注意的一點是:這里,不是onClick而是onServerClick。現在,我們來看一個比較復雜的舉例,在這個舉例里面,點擊鏈接可以顯示一張圖片,再一次點擊,可以隱藏該圖片,代碼如下:?
<html>?
<head>?
<script language="C#" runat="server">?
void Page_Load (Object sender, EventArgs e) {?
if (!IsPostBack) {?
showhideLink.InnerText = image.Visible ? "隱藏圖片" : "顯示圖片";?
}?
}?
void ShowHideAd(Object sender, EventArgs E) {?
image.Visible = image.Visible ? false : true;?
showhideLink.InnerText = image.Visible ? "隱藏圖片" : "顯示圖片";?
}?
</script>?
</head>?
<body>?
<form runat="server">?
<p><a id="showhideLink" runat="server" onServerClick="ShowHideAd"/></p>?
<table id="image" cellpadding=3 visible=false runat="server">?
<tr><td>?
<img src="x.gif">?
</td></tr>?
</table>?
</form>?
</body>?
</html>?
程序運行效果:?轉存失敗重新上傳取消轉存失敗重新上傳取消轉存失敗重新上傳取消
2、HTMLButton控件?
HTMLButton沒有太多的變化,但是,按鈕的外觀處理比較任意一點,來看一個舉例:?
<form runat="server">?
<p>With embedded <b><img></b> tag: </p>?
<p><button id="Button1" runat="server"?
style="width:157; height=200"?
onServerClick="saySomething">?
<img src="/aspxtreme/shared/images/billg_tongue.gif"??
width="157" height="200" border=0 alt="">?
</button>?
<p>With rollover effect: </p>?
<p><button id="Button2" runat="server"?
onServerClick="saySomething"??
style="font: 8pt verdana; background-color:lightgreen;??
border-color:black; height=30; width:100"?
οnmοuseοver="this.style.backgroundColor='yellow'"?
οnmοuseοut="this.style.backgroundColor='lightgreen'">?
Click me too!?
</button>?
<p><span id="Message" runat="server" />?
</form>?
在以上代碼中,當用戶鼠標移到按鈕上和離開按鈕時,按鈕的表面顏色是不一樣的,效果比較特別,如圖:?
轉存失敗重新上傳取消轉存失敗重新上傳取消轉存失敗重新上傳取消轉存失敗重新上傳取消轉存失敗重新上傳取消轉存失敗重新上傳取消
? ?
3、HtmlGenericControl控件?
從控件名字上,可能我們很難猜測這個控件的功能。仔細觀察所有的HTML控件,我們發現有一些HTML標記沒有對應的HTML控件,比如:<body>、<div>、<span>等,而這些HTML標記又比較重要,如果需要用到這些標記怎么辦呢?HTMLGenericControl就是這些標記的控件。現在,我們看一個比較有趣的舉例,在這個例子中,用戶可以選擇頁面的背景顏色!這個功能在一些文學、讀書網站、資源網站可能比較實用,因為這些網站可能提供大量資料給瀏覽者,如果用戶閱讀時間較長而所有資料格式都差不多的話,用戶有可能感覺網站比較單調而且任意疲勞,這時候,如果可以讓用戶選擇網頁的背景顏色,用戶就會感覺比較舒適。來看程序源代碼:?
<html>?
<head>?
<title>試驗HtmlGenericControl</title>?
<script language="C#" runat="server">?
void Page_Load (object Source, EventArgs e) {?
Body.Attributes["bgcolor"]=ColorSelect.Value;?
}?
</script>?
</head>?
<body id="Body" runat="server">?
<Center>?
<form runat="server">?
<p>選擇頁面背景: </p>?
<select id="ColorSelect" runat="server">?
<option>Aqua</option>?
<option>Bisque</option>?
<option>Chartreuse</option>?
<option>DodgerBlue</option>?
<option>ForestGreen</option>?
<option>Gainsboro</option>?
<option>HotPink</option>?
<option>Ivory</option>?
<option>Khaki</option>?
<option>Lavender</option>?
<option>Magenta</option>?
<option>NavajoWhite</option>?
<option>Olive</option>?
<option>PaleGoldenRod</option>?
<option>Red</option>?
<option>SandyBrown</option>?
<option>Tan</option>?
<option>Violet</option>?
<option>Wheat</option>?
<option>YellowGreen</option>?
</select>?
<input type=submit runat="server" Value="確定">?
</form>?
</Center>?
</body>?
</html>?
程序運行效果如下:?轉存失敗重新上傳取消轉存失敗重新上傳取消轉存失敗重新上傳取消
這個程序很有趣,而且非常簡單,從這里,我們可以感受到這個控件的方便和實用。其實,這個控件實現的一些功能,我們以前可能很少使用,甚至都沒有仔細考慮,這就是新的Asp.NET需要我們挖掘的一些地方,也是我們需要改變編程、設計思維的原因。?
4、HtmlImage控件?
在一些新聞網站和圖片網站中,我們有時候需要查找、顯示很多圖片,這些圖片一般我們是直接顯示出來,當圖片比較多的情況下,直接顯示出來就會增加網頁文件大小,消耗用戶時間。所以,這時候,我們可以直接給用戶一個圖片下拉選擇框來選擇真正需要顯示的圖片。下面的舉例就是這樣,由用戶選擇來顯示圖片:?
<html>?
<head>?
<title>HtmlImage試驗</title>?
<script language="C#" runat="server">?
void chgImage (Object Sender, EventArgs e) {?
Image.Src= ImgSelector.Value;?
}?
</script>?
</head>?
<body>?
<form runat="server">?
<img id="Image" runat="server"??
src="top.gif" />?
<p>選擇圖片: </p>?
<select id="ImgSelector" runat="server">?
<option value="Cereal1.gif">Healthy Grains</option>?
<option value="warning.gif">warning</option>?
<option value="Cereal3.gif">U.F.O.S</option>?
<option value="Cereal4.gif">Oatey O's</option>?
<option value="x.gif">Strike</option>?
<option value="Cereal7.gif">Fruity Pops</option>?
</select>?
<input type=submit runat="server" value="顯示" onServerClick="chgImage">?
</form>?
</div>?
</body>?
</html>?
程序執行效果如下:?轉存失敗重新上傳取消轉存失敗重新上傳取消轉存失敗重新上傳取消
以上程序演示了使用HTMLImage控件實現選擇顯示圖片的功能,我們注意到,在使用HTMLImage控件的時候,圖片的路徑可以作為控件的一個屬性來設置,這樣,我們就可以很簡單的實現類似以上程序的許多功能。?
5、HtmlTable控件?
我們知道,在HTML中使用Table的時候,Table是已經指定而且不能動態改變的;在ASP中,要實現Table的動態載入也比較困難。在使用HTMLTable的時候,我們就可以很簡單的實現表、表格行和表格單元格的動態生成,因為表格行和表格單元格都已經作為控件,我們可以通過對這些控件的靈活使用來生成動態表格。在以下的舉例中,用戶選擇表格的行數和列數來實現動態生成表格:?
<html>?
<head>?
<title>HTMLTable試驗</title>?
<script language="C#" runat="server">?
void Page_Load(Object sender, EventArgs e) {?
int row=0;?
int numrows=int.Parse(setRows.Value);?
int numcells=int.Parse(setCols.Value);?
for (int j=0; j<numrows; j++) {?
HtmlTableRow r=new HtmlTableRow();?
if (row%2 == 1) r.BgColor="Gainsboro";?
row++;?
for (int i=0; i<numcells; i++) {?
HtmlTableCell c=new HtmlTableCell();?
c.Controls.Add(new LiteralControl("row " + j.ToString() + ", cell " + i.ToString()));?
r.Cells.Add(c);?
}?
Table1.Rows.Add(r);?
}?
}?
</script>?
</head>?
<body>?
<Center>?
<form runat="server">?
<p><table id="Table1" cellpadding=5 cellspacing=0??
border=1 bordercolor="black" runat="server" /></p>?
<table>?
<tr>?
<td>表格行數:</td>?
<td>?
<select id="setRows" runat="server">?
<option>1</option>?
<option>2</option>?
<option>3</option>?
<option>4</option>?
<option>5</option>?
</select></td>?
<td>表格列數:</td>?
<td>?
<select id="setCols" runat="server">?
<option>1</option>?
<option>2</option>?
<option>3</option>?
<option>4</option>?
<option>5</option>?
</select></td></tr>?
</table>?
<p><input type=submit value="生成表格" runat="server">?
</form>?
</Center>?
</body>?
</html>?
程序執行效果如下:?轉存失敗重新上傳取消轉存失敗重新上傳取消轉存失敗重新上傳取消
在以上圖片中,程序動態生成一個兩行三列的表格。在學習使用HTMLTable的時候,需要真正了解表格是怎樣生成的,這一點,我們可以參考上面程序的實現方式。HTMLTable的應用非常廣泛,特別是網頁結合數據庫的時候,這種動態生成Table的設計方法更加必不可少。?
三、總結?
HTML控件是ASP.NET的主要部分之一,利用這些控件,我們在設計中可以實現很多我們以前完全不敢想或者很難實現的功能。?
總結
以上是生活随笔為你收集整理的Web服务器控件和HTML控件的区别与联系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 山东渔民拍到罕见“金箍棒云”上热搜 拍摄
- 下一篇: 赛力斯回应:已初步确认起火源并不是来自车