有朋友給我說:Asp.net之所以方便和強大,關鍵是它有一組強大的Asp.net服務器控件,在Asp.net中我們經常會遇到Html標注,Html控件、Web控件和Asp.net服務器控件等等,你能區分出它們之間的關系嗎?那我們首先來區分下Asp.net開發中經常用到的幾個概念,Html標注、Html控件、Web控件和Asp.net服務器控件。
Html標注:就是我們傳統所說的Html 超文本標記語言,這些Html標注在以往的靜態網頁或網頁裡即可滿足我們的需求,Html標注並沒有辦法利用程序直接來控制它們的屬性、使用方法和接收事件,我們必須另外學習其它如JavaScript 等程序語言才得以控制。如:<input id="Button1" type="button" value="button" />。
Html控件:就是上面我們講的Html標注的屬性裡加上runat="server"所構成的控件,至於Html標注和Html控件之間的區別很明顯,Html控件是運行於服務器端,Html標注是運行於客戶端。具體來說:當ASP.NET 網頁執行時,會檢查標注有無runat 屬性,如果標注沒有設定,那麼Html標注就會被視為字符串,並被送到字符串流等待送到客戶端,客戶端的浏覽器會對其進行解釋;如果Html標注有設定runat="server" 屬性,Page 對象會將該控件放入控制器,服務器端的代碼就能對其進行控制,等到控制執行完畢後再將Html控件的執行結果轉換成Html標注,然後當成字符串流發送到客戶端進行解釋。如:<input id="Button1" type="button" value="button" runat=”server” />。
Asp.net服務器控件:也叫Web服務器控件,Asp頁面中用來定義Web應用程序用戶界面的組件,是Web Forms編程模型的基本元素,它會依Client的情況生產一個或者多個Html控件,而不是直接描述Html元素。如<asp:Button ID="Button2" runat="server" Text="Button" />。那它和Html服務器端控件有什麼區別,以及它有什麼新的特點呢?
1、Asp.net服務器控件提供更加統一的編程接口,如每個Asp.net服務器控件都有Text屬性。
2、隱藏客戶端的不同,這樣程序員可以把更多的精力放在業務上,而不用去考慮客戶端的浏覽器是ie還是firefox,或者是移動設備。
3、Asp.net服務器控件可以保存狀態到ViewState裡,這樣頁面在從客戶端回傳到服務器端或者從服務器端下載到客戶端的過程中都可以保存。
4、事件處理模型不同,Html標注和Html控件的事件處理都是在客戶端的頁面上,而Asp.net服務器控件則是在服務器上,舉例來說:
<input id="Button4" type="button" value="button" runat="server"/>是Html控件,此時我們點擊此按鈕,頁面不會回傳到服務器端,原因是我們沒有為其定義鼠標點擊事件。
<input id="Button4" type="button" value="button" runat="server" onserverclick="test" />我們為Html控件添加了一個onserverclick事件,點擊此按鈕頁面會發回服務器端,並執行test(object sender, EventArgs e)方法。
<asp:Button ID="Button2" runat="server" Text="Button" />是Asp.net服務器控件,並且我們沒有為其定義click,但是我們點擊時,頁面也會發回到服務器端。
由此可見:Html標注和Html控件的事件是由頁面來觸發的,而Asp.net服務器控件則是由頁面把Form發回到服務器端,由服務器來處理。
以上是我們對Asp.net裡的控件進行了簡單的介紹,我們通常說的Web控件也就是指Asp.net服務器控件,同時本教程也是主要講Asp.net服務器控件。
另:Html控件位於System.Web.UI.HtmlControls,Asp.net服務器控件位於System.Web.UI.WebControls。