程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET控件開發基礎(4)

ASP.NET控件開發基礎(4)

編輯:關於ASP.NET

一.從繼承WebControl開始

在第二篇教程中,重點介紹了Render()方法的使用,用來呈現控件,但從Control類繼承的控件尚未發揮asp.net控件的作用.大家知道web服務器控件分為HTML服務器控件(如<input id="Button2" runat="server" type="button" value="button" />這樣的形式)和標准服務器控件(就是<asp:.. id="" runat="server"/>這樣的形式的控件)

HTML服務器控件的控件從System.Web.UI.HtmlControls.HtmlControl 類派生

標准服務器控件的控件從System.Web.UI.WebControls.WebControl 類派生

HtmlControl 類和WebControl 類則從System.Web.UI.Control 類派生,並擴展.

所以我們說,所有的服務器控件都繼承自System.Web.UI.Control 類,即所有的服務器控件都具有Control 類的共同屬性,如Visible,EnableViewState屬性,HtmlControl 類和WebControl 類則擴充了System.Web.UI.Control 類的功能,如

HtmlControl 類定義了所有 HTML 服務器控件所通用的方法、屬性 (Property) 和事件(具體參數參照MSDN)

WebControl 類定義了所有標准服務器控件所通用的方法、屬性 (Property) 和事件(具體參數參照MSDN)

如每個繼承了WebControl 類的標准控件都有定義外觀和行為的屬性,然後不同控件再根據需要擴展功能.

圖一

所以我們推薦的做法是直接從WebControl 類派生,而非Control類.我們所做的非並從頭開始.從WebControl 類繼承可以幫我們省很多工作.

二.重寫WebControl類方法,不再是Render()

WebControl類繼承了Control類,當然有Render方法,在WebControl類中重寫了Render方法,如下代碼

示例一

protected override void Render(HtmlTextWriter output)
{
  RenderBeginTag(output);
  RenderContents(output);
  RenderEndTag(output);
}

注意 RebderBeginTag方法並非是HtmlTextWriter類中的方法,而是WebControl類中的方法,表示輸出HTML標簽頭標記,如<table .....>,RenderEndTag方法則輸出HTML標簽尾標記,如</table>.中間的RenderContents方法則就是Control類的Render方法. 看下面RenderContents方法的定義.

示例二

protected override void RenderContents(HtmlTextWriter output){
  //使用默認邏輯來呈現子控件,那麼一定要調用基類中的方法。
  base.Render(output);
}

接著再看RenderBeginTag方法的定義

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved