中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ASP.NET中RenderContents控件的作用是什么

發布時間:2021-07-15 15:39:58 來源:億速云 閱讀:157 作者:Leah 欄目:編程語言

本篇文章為大家展示了ASP.NET中RenderContents控件的作用是什么,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

基礎知識

就ASP.NET服務器控件而言只存在兩種情況:一種是具有外觀可視化元素的控件,還有一種是不具有外觀可視化元素的控件。如果需要開發的服務器控件包含可視化元素,那么多數情況下,建議開發人員創建繼承自System.Web.UI.WebControls.WebControl基類的控件類。這種做法的主要原因是基于便捷性考慮。因為,WebControl類可提供服務器控件的部分與外觀有關的公共屬性、方法和事件等。通過該類定義的屬性,可以控制服務器控件的外觀和行為。例如,使用BackColor和ForeColor屬性,可以分別控制服務器控件的背景色和前景顏色;在可以顯示邊框的控件上,可以通過設置BorderWidth、BorderStyle和BorderColor屬性,控制邊框寬度、邊框樣式和邊框顏色;服務器控件的大小可以通過Height和Width屬性來指定等等。如果控件基類是Control類,那么實現這些類似內容則非常繁瑣。

在使用WebControl基類實現ASP.NET服務器控件呈現的過程中,必然要使用該類所提供的屬性和方法等成員對象。這是讀者需要重點掌握的內容。另外,對于該基類的構造函數也是不容忽視的。下面首先從WebControl的構造函數開始入手進行講解,隨后將說明常見的成員對象。

WebControl類包括三個構造函數,它們都用于初始化WebControl類的新實例,然而它們之間還存在一些細小的差異。

◆protected WebControl ()

該構造函數用于初始化表示Span HTML元素的WebControl類的新實例。通常情況下,開發人員并不直接調用此構造函數。相反,它通常由派生類的構造函數調用以將TagKey屬性初始化為Span枚舉值。在隨后的示例中,將重寫TagKey屬性,從而調用此構造函數。

◆public WebControl (HtmlTextWriterTag tag)

開發人員可使用此構造函數創建并初始化使用指定的System.Web.UI.HtmlTextWriterTag值的WebControl類的新實例。其中的參數tag表示HtmlTextWriterTag枚舉值之一。可能讀者對于HtmlTextWriterTag還不太熟悉。它是一個枚舉類型,其枚舉值多為HTML標記,例如,A、B、Bold、Button等等。

◆protected WebControl (string tag)

使用此構造函數可創建并初始化使用指定的HTML標記的WebControl類的新實例。其中參數tag表示HTML標記。當使用該構造函數時一定要注意:不能直接調用此構造函數。相反,它通常由派生類的構造函數調用以初始化TagKey和TagName屬性。

在了解了WebControl類的構造函數之后,讀者還必須了解WebControl類的一些常用屬性和方法。下面列舉了這些常用成員對象,它們對于實現ASP.NET服務器控件呈現有著重要意義。

(1)Attributes屬性

該屬性用于獲取與控件的屬性不對應的任意特性(只用于呈現)的集合,其屬性類型為AttributeCollection。

(2)ControlStyle屬性

該屬性用于獲取服務器控件的樣式,它是Style類型。ControlStyle屬性封裝WebControl類的所有外觀屬性,如BorderColor和Font。

(3)TagKey屬性

該屬性用于獲取與此服務器控件相對應的System.Web.UI.HtmlTextWriterTag值,其屬性類型為HtmlTextWriterTag枚舉。

(4)protected virtual void AddAttributeToRender(HtmlTextWriter writer);

該方法將需要呈現的HTML屬性和樣式添加到指定的System.Web.UI.HtmlTextWriter中。注意在重寫過程中,一定要調用基類中相應的方法。

(5)public void ApplyStyle(Style s);

該方法將指定樣式的所有非空白元素復制到控件,改寫控件的所有現有的樣式元素。

(6)public void MergeStyle(Style s);

該方法將指定樣式的所有非空白元素復制到控件,但不改寫該控件現有的任何樣式元素。

(7)protected override void Render(HtmlTextWriter writer);方法

該方法重寫了Control.Render。

(8)protected virtual void RenderContents(HtmlTextWriter writer);

該方法將ASP.NET服務器控件的內容呈現到指定的編寫器中。如果要在控件的標簽中寫入文本或其他內容,則需要重寫該方法;如果要使用默認邏輯來呈現子控件,那么一定要調用基類中相應的方法。

可能讀者已經注意到WebControl基類中包括的兩個方法:Render和RenderContents。根據上文所介紹的內容可知,Control基類中包括Render方法。由于WebControl類繼承自Control類,因此,WebControl類中包含Render方法是無可非議的。然而,WebControl類中卻有一個RenderContents方法,并且該方法與Render方法在功能、參數等方面都非常相似。那么在呈現控件過程中到底應該使用哪一個呢?

實際上,在通常情況下,如果服務器控件自WebControl基類派生,那么其中的Render方法很少使用,而主要使用RenderContents方法實現控件呈現。為了說明其中的原因,我們必須了解WebControl基類中Render方法的實現邏輯。

在WebControl基類中的Render方法的實現示意性代碼如下所示:

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

在WebControl基類中的RenderBeginTag方法的實現示意性代碼如下:

public virtual void RenderBeginTag(HtmlTextWriter output)  {   AddAttributesToRender(output);    HtmlTextWriterTag tagKey = TagKey;   if(tagKey != HtmlTextWriterTag.Unknown)   {  output.RenderBeginTag(tagKey);    } else {  output.RenderBeginTag(this.TagName);   }  }

在WebControl基類中的RenderContents方法的實現示意性代碼如下:

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

分析以上代碼可以得出以下結論:

一、為了在由WebControl派生的類中實現控件呈現,必須重寫AddAttributesToRender、RenderBeginTag、RenderEndTag、RenderContents等方法中的一個或者多個,而不必重寫Render方法。

二、重寫AddAttributesToRender、RenderBeginTag、RenderEndTag、RenderContents等方法非常重要(請注意重寫這些方法的條件及注意事項),否則服務器控件可能會出現丟失標簽的情況,這將嚴重影響服務器控件的呈現。

三、當呈現ASP.NET服務器控件標簽中的內容時,必須重寫RenderContents方法。

上述內容就是ASP.NET中RenderContents控件的作用是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安庆市| 咸宁市| 贺州市| 佛冈县| 黄冈市| 颍上县| 绥化市| 高清| 耒阳市| 永吉县| 巴青县| 阜南县| 历史| 万宁市| 南部县| 牡丹江市| 凤庆县| 永清县| 公主岭市| 长沙市| 罗甸县| 宜君县| 新疆| 明溪县| 浮梁县| 临清市| 安溪县| 高邑县| 文山县| 湘乡市| 运城市| 威远县| 青田县| 拉萨市| 龙南县| 桐梓县| 隆回县| 清河县| 濮阳县| 威信县| 武山县|