淺談ASP.NET中render方法

來源:互聯網
上載者:User
2011-06-08 11:36 runyl 部落格園 我要評論(1) 字型大小:T | T

Control.Render 方法是將伺服器控制項內容發送到提供的HtmlTextWriter 對象,此對象編寫將在用戶端轉譯的內容。本文主要介紹的就是ASP.NET中render方法,一起來看。

AD: 2013大資料全球技術峰會低價搶票中

 

Asp.net中所有的控制項都是從System.Web.UI.Control類,在control類中定義了三個與呈現有關的方法,分別是Render方法,RenderChildren方法和RenderControl方法.其中RenderControl方法是public的方法,先看看這三個方法的實現:

  1. Public void RenderControl(HtmlTextWriter writer)   
  2. {   
  3. //判斷Visible屬性是否為真,如果是,則調用Render方法呈現控制項,否則不呈現控制項   
  4. if(Visible)   
  5. {   
  6. Render(writer);   
  7. }   
  8. }   
  9. Protected virtual void Render(HtmlTextWriter writer)   
  10. {   
  11. //在這裡寫呈現控制項本身的代碼   
  12. …….   
  13. //調用RenderChildren方法呈現該控制項的子控制項   
  14. RenderChildren(writer);   
  15. }   
  16. Protected virtual void RenderChildren(HtmlTextWriter writer)   
  17. {   
  18. //迴圈調用每個子控制項中的RenderControl方法呈現子控制項,遞迴實現呈現整個頁面的控制項樹   
  19. foreach(Control c in Controls)   
  20. {   
  21. c.RenderControl(writer);   
  22. }   
  23. }  

RenderControl方法用於供外部類進行調用,以產生控制項,如父控制項調用子控制項的Rendercontrol方法.在RenderControl方法只是作了是否顯示該控制項的判斷,如果顯示則調用控制項的被保護方法Render. 

Render方法是呈現控制項的核心方法,在現實性自訂控制項中,我們一般都是通過重寫Render方法來呈現控制項的,如果控制項是一個容器控制項,就要重寫RenderChildren方法來呈現子控制項.

所有的服務端控制項都是從System.Web.UI.WebControl中派生.而WebControl又從Control中派生,所以WebControl具有上述的三個方法,但是又增加了幾個方法,它把Render方法又細分成三個方法:RenderBgeginTag,RenderContents,RenderEndTag.Render的實現代碼如下:

  1. Protected override void Render(HtmlTextWriter writer)   
  2. {   
  3. //呈現開始標籤   
  4. RenderBgeginTag(writer);   
  5. //呈現標籤的內容   
  6. RenderContents(writer);   
  7. //呈現結束標籤   
  8. RenderEndTag(writer);   
  9. }   
  10. Public virtual void RenderBeginTag(HtmlTextWriter writer)   
  11. {   
  12. //調用AddAttributesToRender方法,添加標籤的屬性   
  13. AddAttributesToRender(writer);   
  14. //判斷呈現的標籤是否為已知的標籤;   
  15. HtmlTextWriterTag tagkey=TagKey;   
  16. If (tagkey!=HtmlTextWriterTag.Unknown)   
  17. {   
  18. Writer.RenderBeginTag(tagkey);   
  19. }   
  20. Else   
  21. {   
  22. //未知標籤,則使用指定的標籤名TagName屬性   
  23. Writer.RenderBeginTag(this.TagName);   
  24. }   
  25. }   
  26. Protected virtual void RenderContents(HtmlTextWriter writer)   
  27. {   
  28. //如果要呈現子控制項,就要調用基類的Render方法   
  29. base.Render(writer);   
  30. }  

看這幾個方法,我覺得好象沒有多大的必要把render方法分解成三個方法,這樣僅對於一呈現單個標籤的控制項才有意義,對於複合的控制項似乎沒什麼意義,還增加了複雜度. 

總結:

1.如果從Control中派生,則應重載Render()方法呈現控制項.如果控制項是一個容器控制項,則應在render方法中調用基類的base.RenderChildren()方法,呈現子控制項.

2.如果從Webcontrol類中派生,分兩種情況,一種是利用TagKey屬性產生輸出的html標籤,這時應重載RenderContents()方法來呈現控制項.第二種是不想呈現預設的的用TagKey產生的html標籤,這時應重載Render()方法來呈現控制項,如下代碼所示:

  1. Protected virtual void Render(HtmlTextWriter writer)   
  2. {   
  3. //在這裡寫呈現控制項本身的代碼   
  4. AddAttributesToRender(writer);   
  5. RenderContents(writer);   
  6. }   
  7. Protected virtual void RenderContents(HtmlTextWriter writer)   
  8. {   
  9. //呈現本控制項代碼   
  10. ….   
  11. //如果要呈現子控制項,就要調用基類的Render方法   
  12. base.Render(writer);   
  13. }  

3.如果從Webcontrol類中派生,並且該控制項是一個容器控制項,則應在RenderContents中調用base.Render()方法,以呈現子控制項.

其他的兩種方法,我們會在後續文章中介紹到。希望對你有協助。

【編輯精選】

  1. ASP.net的身分識別驗證方式FORMS
  2. 大型高效能ASP.NET系統架構設計
  3. 使用ASP.NET操作IIS7中使用應用程式
  4. 詳解ASP.NET MVC 3中View的變化
  5. ASP.NET控制項10個最有用的屬性詳解
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.