<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        ASP.NET2.0服務器控件之Render方法

        來源:懂視網 責編:小采 時間:2020-11-27 22:34:26
        文檔

        ASP.NET2.0服務器控件之Render方法

        ASP.NET2.0服務器控件之Render方法:控件呈現是指向HTTP輸出流中寫入標記文本的過程。服務器通過HTTP輸出流向客戶端發送生成的標記文本,這些文本將會通過客戶端瀏覽器轉換為可視化的元素顯示出來。使用控件呈現,開發人員可以將HTML標記、腳本代碼、CSS樣式表等等輸入到客戶端瀏覽器。實現服務
        推薦度:
        導讀ASP.NET2.0服務器控件之Render方法:控件呈現是指向HTTP輸出流中寫入標記文本的過程。服務器通過HTTP輸出流向客戶端發送生成的標記文本,這些文本將會通過客戶端瀏覽器轉換為可視化的元素顯示出來。使用控件呈現,開發人員可以將HTML標記、腳本代碼、CSS樣式表等等輸入到客戶端瀏覽器。實現服務

          控件呈現是指向HTTP輸出流中寫入標記文本的過程。服務器通過HTTP輸出流向客戶端發送生成的標記文本,這些文本將會通過客戶端瀏覽器轉換為可視化的元素顯示出來。使用控件呈現,開發人員可以將HTML標記、腳本代碼、CSS樣式表等等輸入到客戶端瀏覽器。實現服務器控件呈現主要有兩種方式:一是Control類的Render方法,二是WebControl的RenderContents方法。本文重點介紹使用Control類的Render方法實現控件呈現的應用。

          使用HtmlTextWriter類

          Control類的Render方法主要用于實現控件呈現,其聲明代碼如下:

        protected virtual void Render(HtmlTextWriter output)


          如上代碼所示,Render方法的參數是一個HtmlTextWriter類型。為了更好的應用Render方法,讀者應首先了解HtmlTextWriter類及其相關內容。

          根據MSDN2005的描述,HtmlTextWriter類用于將標記字符和文本寫入到ASP.NET服務器控件輸出流。此類提供了ASP.NET服務器控件在向客戶端呈現標記時所使用的格式設置功能。為了實現類的功能,HtmlTextWriter類定義了多個字段、屬性和方法。由于成員對象眾多,本文只挑選了一些常用成員加以說明,同時,還將介紹一些ASP.NET 2.0的新增成員。

          常用成員對象包括:

          ·AddAttribute方法

          對于HtmlTextWriter對象通過對RenderBeginTag方法的后續調用創建的元素,向其開始標記中添加指定的標記屬性和值。

          ·AddStyleAttribute方法

          對于 HtmlTextWriter 對象通過對 RenderBeginTag 方法的后續調用創建的元素,向其開始標記中添加標記樣式屬性。

          ·Write方法

          將指定數據類型連同任何掛起的制表符間距一起寫入到輸出流。

          ·WriteAttribute方法

          將標記屬性及其值寫入到輸出流。

          ·WriteBeginTag方法

          任何制表符間距和指定標記元素的開始標記寫入到輸出流。

          ·WriteEndTag方法

          寫入指定的標記元素的任何制表符間距和結束標記。

          ·Encoding屬性

          獲取 HtmlTextWriter 對象用于將內容寫入頁的編碼。

          ·Indent屬性

          獲取或設置用以縮進每一行標記的開始位置的制表符位置數。

          ·NewLine屬性

          獲取或設置由 HtmlTextWriter 對象使用的行結束符字符串。

          對于初學者而言,建議重點掌握以上成員對象的應用。另外,ASP.NET 2.0還為HtmlTextWriter類新增了一些成員,這些成員包括:

          ·BeginRender方法

          通知 HtmlTextWriter 對象或派生類的對象,某個控件將會呈現。

          ·EndRender方法

          通知 HtmlTextWriter 對象或某個派生類的對象,某控件已完成呈現。

          ·IsValidFormAttribute方法

          檢查一個屬性以確保它可以在 <form> 標記元素的開始標記中呈現。

          ·WriteEncodedUrl方法

          對指定的 URL 進行編碼,然后將它寫入到輸出流。URL 可以包括參數。

          ·WriteEncodedText方法

          對請求的設備的指定文本進行編碼,然后將其寫入到輸出流。

          ·WriteBreak方法

          將 <br /> 標記元素寫入到輸出流。

          使用Render方法實現控件呈現

          1、基礎知識

          本文所講解的Render方法隸屬于System.Web.UI.Controls.Control類。該類是創建服務器控件的基類,很多控件類均繼承自該類。在Control類中包括三個用于實現控件呈現的方法:Render、RenderChildren和RenderControl。它們都使用HtmlTextWriter的實例作為參數,它們允許為一個HtmlTextWriter對象提供服務器控件的內容,并將其內容封裝至HTTP輸出流中輸出到客戶端顯示。下面簡單對這三個方法進行簡單介紹。

          (1) protected virtual void Render(HtmlTextWriter writer);

          該方法用于將服務器控件內容發送到提供的HtmlTextWriter對象,此對象編寫將在客戶端呈現的內容。在開發服務器控件時,可以重寫此方法以呈現服務器控件。

          (2) protected virtual void RenderChildren(HtmlTextWriter writer);

          該方法用于將服務器控件子級的內容輸出到提供的HtmlTextWriter對象,此對象編寫將在客戶端呈現的內容。該方法通知ASP.NET呈現頁中的所有Active Server Pages代碼。如果頁上沒有任何ASP代碼,此方法將呈現服務器控件的所有子控件。

          (3) protected virtual void RenderControl(HtmlTextWriter writer);和protected void RenderControl (HtmlTextWriter writer,ControlAdapter adapter)

          RenderControl有兩個重載方法,它們都用于將服務器控件的內容輸出到所提供的HtmlTextWriter對象中。如果已啟用跟蹤功能,則存儲有關控件的跟蹤信息。如果服務器控件的Visible屬性設置為true,該方法將確定是否啟用頁的跟蹤功能。如果啟用,它將存儲與控件有關的跟蹤信息,同時向頁呈現服務器控件的內容。另外,前一個重載方式是ASP.NET 2.0從ASP.NET 1.0中繼承而言,后一個重載方式是ASP.NET 2.0新增的。后者具體使用提供的ControlAdapter對象將服務器控件內容輸出到提供的HtmlTextWriter對象。其中參數adapter是ControlAdapter類型,它用于定義呈現的ControlAdapter。當實現在各種設備和瀏覽器中運行的服務器控件時,該方法比較常用。

          以上3個方法看起來好像是獨立的3個方法,然而,實際上它們之間存在密切的聯系。讀者可通過閱讀以下示意性代碼,從而理解它們之間的關系。//RenderCotrol方法基本實現
        public void RenderControl(HtmlTextWriter output)
        {
         if(Visible)
         {
          Render(output);
         }
        }
        //Render方法基本實現
        protected virtual void Render(HtmlTextWriter output)
        {
         RenderChildren(output);
        }
        //RenderChildren方法基本實現
        protected virtual void RenderChildren(HtmlTextWriter output)
        {
         foreach(Control c in Controls)
         {
          c.RenderControl(output);
         }
        }
          如上代碼所示,其中列舉了RenderControl、Render、RenderChildren方法的實現思路。顯而易見的是,在控件呈現過程中,這三個方法都在起著作用,而且使用了一個簡單的遞歸調用過程。大體而言,可以理解為:

          (1)頁面框架建立一個HtmlTextWriter類的實例;

          (2)頁面框架將這個實例對象傳遞給RenderControl方法;

          (3)RenderControl方法檢查控件的可視屬性Visible是否為true。如果為true,RenderControl方法將調用Render方法;如果為false,則不呈現該控件和其子控件;

          (4)Render方法執行默認實現,調用RenderChildren方法;

          (5)RenderChildren方法按照默認實現中的設定調用每個子控件的RenderControl方法;

          實際上,如果讀者短時間內不能理解以上過程也沒有很大的關系。對于初學者而言,關鍵是要記住最重要、最常用的是Render方法。控件開發者可以通過重寫Render方法完成呈現控件的任務。

          2、示例應用

          上文介紹了使用Control類的Render方法實現控件呈現的基礎知識。下面將通過一個典型示例,幫助讀者初步理解Render的使用方法。示例效果如圖1所示。

        按此在新窗口瀏覽圖片
        圖1效果圖
          如圖1所示,該服務器控件呈現了一個超鏈接,并且設置了文本為紅色。當用戶單擊紅色文字時,頁面將轉向微軟站點。當然,用戶可以通過屬性LinkUrl來設置超鏈接地址。

          下面列舉了示例實現源代碼。

        using System;
        using System.Collections.Generic;
        using System.ComponentModel;
        using System.Text;
        using System.Web;
        using System.Web.UI;
        using System.Web.UI.WebControls;
        namespace UsingRenderControl
        {
         [DefaultProperty("LinkUrl")]
         [ToolboxData("<{0}:RenderControl runat=server></{0}:RenderControl>")]
         public class RenderControl : Control
         {
          // 實現LinkUrl
          [Bindable(true)]
          [Category("Appearance")]
          [DefaultValue("http://localhost/")]
          [Localizable(true)]
          public string LinkUrl
          {
           get { String s = (String)ViewState["LinkUrl"];
            return ((s == null) ? String.Empty : s);}
           set { ViewState["LinkUrl"] = value; }
          }
          // 重寫Render方法
          protected override void Render(HtmlTextWriter writer)
          {
           writer.AddAttribute(HtmlTextWriterAttribute.Href, LinkUrl);
           writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "red");
           writer.RenderBeginTag(HtmlTextWriterTag.A);
           writer.Write("瀏覽網站");
           writer.RenderEndTag();
          }
         }
        }
          如上代碼實現了自定義服務器控件類RenderControl。該類從Control基類繼承,具體實現了表示超鏈接地址的LinkUrl(默認值為http://localhost/),并重寫了Render方法。在重寫Render的過程中,調用了一些HtmlTextWriter類成員,例如,Writer、AddAttribute、AddStyleAttribute、RenderBeginTag和RenderEndTag方法等。另外,可能開發人員在使用Writer方法過程中,需要呈現一個比較長的字符串。建議此時多多使用Writer方法,而不要使用字符串級聯或者StringBuilder類的相關方法進行實現。因為,那樣將會消耗大量的系統時間和內存,效率較低。

          可能有一些讀者會問,如果將服務器控件呈現的多行代碼的順序變化一下,是否會有什么不同呢?例如,假設首先依次應用RenderBeginTag、Write、RenderEndTag方法,然后再調用AddAttribute和AddStyleAttribute方法,那么會顯示相同的效果嗎?答案是否定的。這里需要強調的是:在呈現控件的過程中,首先要定義服務器控件的屬性和CSS樣式等內容,然后再定義服務器控件的主體內容,這種順序不能改變的。

          另外,如果讀者感興趣可以在代碼中實現一個Text屬性,用于獲取或者設置控件所顯示的文本。這樣,在Render方法中,使用Write方法輸出的"瀏覽網站"文字內容則可由Text屬性代替。

          下面列舉了為使用以上的自定義服務器控件,而創建的Default.aspx文件源代碼。<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
        <%@ Register TagPrefix="Sample" Assembly="UsingRenderControl" Namespace="UsingRenderControl" %>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
        <head runat="server">
        <title>使用Render方法實現控件呈現</title>
        </head>
        <body>
        <form id="form1" runat="server">
        <div>
        <Sample:RenderControl runat="server" ID="CustomerControl" LinkUrl="http://www.microsoft.com/">
        </Sample:RenderControl>
        </div>
        </form>
        </body>
        </html>
          以上代碼比較簡單,其中主要聲明了自定義服務器控件RenderControl,并設置其LinkUrl屬性值為http://www.microsoft.com,即微軟站點地址。

          當用戶在瀏覽器中運行以上頁面,并查看相關的Html源文件時,可得到如下的代碼:

        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
        <title> 使用Render方法實現控件呈現</title>
        </head>
        <body>
        <form name="form1" method="post" action="Default.aspx" id="form1">
        <div>
        <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNzMyMTY5NTU2ZGQQYrLd/G+vm1h41r2CEkxID63o5g==" />
        </div>
        <div>
        <a style="color:red;">瀏覽網站</a>
        </div>
        </form>
        </body>
        </html>
          通過觀察以上代碼可知,自定義服務器控件RenderControl實際呈現的結果是粗體所示部分的代碼,其最終呈現為一個表示超鏈接的<a>標記。

          小結

          本文首先介紹了HtmlTextWriter類的基本知識,然后講解了使用Render方法實現控件呈現的應用。在隨后的一篇文章中,筆者將說明另外一種實現控件呈現的方法。從服務器控件開發技術總體而言,控件呈現技術是開發過程中最為常用,也是最為簡單的內容。建議讀者能夠熟練掌握其中的內容。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        ASP.NET2.0服務器控件之Render方法

        ASP.NET2.0服務器控件之Render方法:控件呈現是指向HTTP輸出流中寫入標記文本的過程。服務器通過HTTP輸出流向客戶端發送生成的標記文本,這些文本將會通過客戶端瀏覽器轉換為可視化的元素顯示出來。使用控件呈現,開發人員可以將HTML標記、腳本代碼、CSS樣式表等等輸入到客戶端瀏覽器。實現服務
        推薦度:
        標簽: 方法 方式 服務器
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲AV无码之日韩精品| 四虎在线免费播放| 国产亚洲精品精华液| 一区二区视频免费观看| 亚洲а∨天堂久久精品| 亚洲AV香蕉一区区二区三区| 成年免费大片黄在线观看岛国| 亚洲国产午夜电影在线入口| 2020久久精品国产免费| 亚洲日韩精品无码专区加勒比☆| 最近免费中文字幕4| 亚洲aⅴ天堂av天堂无码麻豆 | 亚洲人成小说网站色| 中文字幕无码不卡免费视频| 亚洲乱码一二三四区乱码| 成人免费在线观看网站| 男女超爽视频免费播放| av在线亚洲欧洲日产一区二区| 在线观看片免费人成视频播放| 国产成人亚洲综合无码精品| 100部毛片免费全部播放完整| 亚洲二区在线视频| 国产精品视_精品国产免费| www永久免费视频| 亚洲成av人片在线观看无码不卡| 日韩精品内射视频免费观看| va天堂va亚洲va影视中文字幕 | 亚洲日韩国产AV无码无码精品| 日本成人免费在线| 国产JIZZ中国JIZZ免费看| 亚洲国产综合专区电影在线| 在线A级毛片无码免费真人 | 亚洲制服丝袜在线播放| 青草草在线视频永久免费| caoporn国产精品免费| 亚洲高清无在码在线无弹窗| 午夜爱爱免费视频| 国产免费无码AV片在线观看不卡| 亚洲 暴爽 AV人人爽日日碰 | heyzo亚洲精品日韩| 免费A级毛片无码A∨中文字幕下载|