日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
淺談ASP.NET中render方法

Asp.net中所有的控件都是從System.Web.UI.Control類,在control類中定義了三個(gè)與呈現(xiàn)有關(guān)的方法,分別是Render方法,RenderChildren方法和RenderControl方法.其中RenderControl方法是public的方法,先看看這三個(gè)方法的實(shí)現(xiàn):

 
 
 
  1. Public void RenderControl(HtmlTextWriter writer) 
  2. //判斷Visible屬性是否為真,如果是,則調(diào)用Render方法呈現(xiàn)控件,否則不呈現(xiàn)控件 
  3. if(Visible) 
  4. Render(writer); 
  5. Protected virtual void Render(HtmlTextWriter writer) 
  6. //在這里寫呈現(xiàn)控件本身的代碼 
  7. ……. 
  8. //調(diào)用RenderChildren方法呈現(xiàn)該控件的子控件 
  9. RenderChildren(writer); 
  10. Protected virtual void RenderChildren(HtmlTextWriter writer) 
  11. //循環(huán)調(diào)用每個(gè)子控件中的RenderControl方法呈現(xiàn)子控件,遞歸實(shí)現(xiàn)呈現(xiàn)整個(gè)頁面的控件樹 
  12. foreach(Control c in Controls) 
  13. c.RenderControl(writer); 

RenderControl方法用于供外部類進(jìn)行調(diào)用,以生成控件,如父控件調(diào)用子控件的Rendercontrol方法.在RenderControl方法只是作了是否顯示該控件的判斷,如果顯示則調(diào)用控件的被保護(hù)方法Render.

Render方法是呈現(xiàn)控件的核心方法,在現(xiàn)實(shí)性自定義控件中,我們一般都是通過重寫Render方法來呈現(xiàn)控件的,如果控件是一個(gè)容器控件,就要重寫RenderChildren方法來呈現(xiàn)子控件.

所有的服務(wù)端控件都是從System.Web.UI.WebControl中派生.而WebControl又從Control中派生,所以WebControl具有上述的三個(gè)方法,但是又增加了幾個(gè)方法,它把Render方法又細(xì)分成三個(gè)方法:RenderBgeginTag,RenderContents,RenderEndTag.Render的實(shí)現(xiàn)代碼如下:

 
 
 
  1. Protected override void Render(HtmlTextWriter writer) 
  2. //呈現(xiàn)開始標(biāo)簽 
  3. RenderBgeginTag(writer); 
  4. //呈現(xiàn)標(biāo)簽的內(nèi)容 
  5. RenderContents(writer); 
  6. //呈現(xiàn)結(jié)束標(biāo)簽 
  7. RenderEndTag(writer); 
  8. Public virtual void RenderBeginTag(HtmlTextWriter writer) 
  9. //調(diào)用AddAttributesToRender方法,添加標(biāo)簽的屬性 
  10. AddAttributesToRender(writer); 
  11. //判斷呈現(xiàn)的標(biāo)簽是否為已知的標(biāo)簽; 
  12. HtmlTextWriterTag tagkey=TagKey; 
  13. If (tagkey!=HtmlTextWriterTag.Unknown) 
  14. Writer.RenderBeginTag(tagkey); 
  15. Else 
  16. //未知標(biāo)簽,則使用指定的標(biāo)簽名TagName屬性 
  17. Writer.RenderBeginTag(this.TagName); 
  18. Protected virtual void RenderContents(HtmlTextWriter writer) 
  19. //如果要呈現(xiàn)子控件,就要調(diào)用基類的Render方法 
  20. base.Render(writer); 

看這幾個(gè)方法,我覺得好象沒有多大的必要把render方法分解成三個(gè)方法,這樣僅對于一呈現(xiàn)單個(gè)標(biāo)簽的控件才有意義,對于復(fù)合的控件似乎沒什么意義,還增加了復(fù)雜度.

總結(jié):

1.如果從Control中派生,則應(yīng)重載Render()方法呈現(xiàn)控件.如果控件是一個(gè)容器控件,則應(yīng)在render方法中調(diào)用基類的base.RenderChildren()方法,呈現(xiàn)子控件.

2.如果從Webcontrol類中派生,分兩種情況,一種是利用TagKey屬性生成輸出的html標(biāo)簽,這時(shí)應(yīng)重載RenderContents()方法來呈現(xiàn)控件.第二種是不想呈現(xiàn)默認(rèn)的的用TagKey生成的html標(biāo)簽,這時(shí)應(yīng)重載Render()方法來呈現(xiàn)控件,如下代碼所示:

 
 
 
  1. Protected virtual void Render(HtmlTextWriter writer) 
  2. //在這里寫呈現(xiàn)控件本身的代碼 
  3. AddAttributesToRender(writer); 
  4. RenderContents(writer); 
  5. Protected virtual void RenderContents(HtmlTextWriter writer) 
  6. //呈現(xiàn)本控件代碼 
  7. …. 
  8. //如果要呈現(xiàn)子控件,就要調(diào)用基類的Render方法 
  9. base.Render(writer); 

3.如果從Webcontrol類中派生,并且該控件是一個(gè)容器控件,則應(yīng)在RenderContents中調(diào)用base.Render()方法,以呈現(xiàn)子控件.

其他的兩種方法,我們會(huì)在后續(xù)文章中介紹到。希望對你有幫助。


當(dāng)前題目:淺談ASP.NET中render方法
本文路徑:http://www.5511xx.com/article/dpocspc.html