ASP.Net的Web服務器控件、Html服務器控件和Html控件

這是關於ASP.Net常被問到的一個問題,很老很老的概念,但也是一個比較容易一知半解的問題。自問了一下,似乎揣着明白說不清楚,於是做點功課整理一下。

首先,爲什麼會有Web服務器控件、Html服務器控件和Html控件

  Html控件無需多說,最常用的控件,ASP時代的唯一選擇,世界開始的時候它就在那。當微軟推出.Net後,爲了提供ASP.Net Web Form開發以和Win Form開發相似的開發體驗,推出了Web服務器控件(Server Control),又稱ASP.Net服務器控件。而Html服務器控件(Html Server Control),則可以看做是爲了向下兼容,便於原本基於ASP系統的移植而推出的一種介於Html控件和Web 服務器控件的權宜產物。

Web服務器控件、Html服務器控件和Html控件的區別

  • Html控件的標籤:<input id="Button" type="button" value="Button" />
  • Html服務器控件的標籤:<input id="Button" type="button" value="Button" runat="server" />
  • Html服務器控件其實就是Html控件的基礎上加上runat="server"所構成的控件
  • Web服務器控件的標籤:<asp:Button ID="Button" runat="server" Text="Button"/>
  • Web服務器控件會根據情況在瀏覽器端產生一個或多個對應的Html標籤。

 

  • Html服務器控件位於System.Web.UI.HtmlControls
  • Web服務器控件位於System.Web.UI.WebControls
  • Web服務器控件與Code Behind的Class文件相結合,提供了包含屬性、方法和事件的完整對象模型。

 

  • Html控件不能在服務器端控制,只能在瀏覽器端通過javascript等腳本語言操作。
  • Html服務器控件設定了runat="server" 屬性後,頁面對象會將該控件載入控制器,服務器端的代碼就能對其進行控制。
  • Html服務器控件在頁面執行完畢後會被轉換成Html標註,然後當成字符串流發送到瀏覽器端,瀏覽器端的腳本能夠進行操作。
  • Web服務器控件的操作則是由頁面把Form發回服務器,然後完全由服務器端代碼處理。

 

  • Html控件的事件處理髮生在瀏覽器端,除非Submit,否則不會發生Postback
  • Html服務器控件的事件處理髮生在瀏覽器端。
  • Html服務器控件如果要Postback到服務器端,調用服務器端的方法,需要添加onserverclick之類的事件。
  • Web服務器控件部分默認爲AutoPostback,或者可以設置AutoPostback。

 

  • 在產生Postback或是重新生成頁面時,Web服務器控件自動保存狀態到ViewState。
  • Html控件和Html服務器控件需要自己編碼實現。

Web服務器控件、Html服務器控件和Html控件的優缺點

  • Html控件和Html服務器控件需要編碼以保持瀏覽器兼容。
  • Web服務器控件能夠檢測瀏覽器的兼容性,保持表現的一致。

 

  • Html服務器控件通過爲Html控件添加runat="server"以實現ASP程序的移植。
  • 將ASP程序移植成使用Web服務器控件的ASP.Net程序相當於重寫新的應用。

 

  • Html控件和Html服務器控件是標準控件,能夠用瀏覽器端腳本語言操作。
  • 使用Web服務器控件提供的對象模型,能夠得到和Win Form類似的編程體驗,而且無需再學習不同的腳本語言。
  • Web服務器內部的代碼並不開放,你無法獲得比較直接的控制。

小結

  個人認爲,Html服務器控件作爲一個過渡的實現,雖然能夠兼顧瀏覽器端和服務器端,終究是一個奇怪的存在,儘量少使用爲妙。從微軟的角度,良好封裝的Web服務器控件提供了大量的便利,同時Web Form和Win Form開發模式的差異使得相互的經驗能夠互通,當然是多使用Web服務器控件爲好。不過Web服務器控件的缺點是佔用服務器資源,頁面Postback過多(Ajax啊Ajax)。所以現實是存在的就是合理的,Html還是要會地,Javascript當然是要好好學地,Web開發各種奇奇怪怪的標籤共存於Page中的場面短時間內是不可能消失地。

參考資料

《html控件、html服務器控件和web服務器控件的區別》 (原出處不詳,請Google)
<Difference Between ASP.NET Server Controls,HTML Server Controls and HTML Intrinsic Controls>


原文鏈接 http://humblepg.com/chs/2009/06/asp-dot-net-web-server-control-html-server-control-html-control.html

發佈了14 篇原創文章 · 獲贊 0 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章