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

RenderControl方法用於供外部類進行調用
以生成控件
如父控件調用子控件的Rendercontrol方法
在RenderControl方法只是作了是否顯示該控件的判斷
如果顯示則調用控件的被保護方法Render
Render方法是呈現控件的核心方法
在現實性自定義控件中
我們一般都是通過重寫Render方法來呈現控件的
如果控件是一個容器控件
就要重寫RenderChildren方法來呈現子控件
所有的服務端控件都是從System
Web
UI
WebControl中派生
而WebControl又從Control中派生
所以WebControl具有上述的三個方法
但是又增加了幾個方法
它把Render方法又細分成三個方法
RenderBgeginTag
RenderContents
RenderEndTag
Render的實現代碼如下

看這幾個方法
我覺得好象沒有多大的必要把render方法分解成三個方法
這樣僅對於一呈現單個標簽的控件才有意義
對於復合的控件似乎沒什麼意義
還增加了復雜度
總結
如果從Control中派生
則應重載Render()方法呈現控件
如果控件是一個容器控件
則應在render方法中調用基類的base
RenderChildren()方法
呈現子控件
如果從Webcontrol類中派生
分兩種情況
一種是利用TagKey屬性生成輸出的html標簽
這時應重載RenderContents()方法來呈現控件
第二種是不想呈現默認的的用TagKey生成的html標簽
這時應重載Render()方法來呈現控件
如下代碼所示

如果從Webcontrol類中派生
並且該控件是一個容器控件
則應在RenderContents中調用base
Render()方法
以呈現子控件
其他的兩種方法
我們會在後續文章中介紹到
希望對你有幫助
From:http://tw.wingwit.com/Article/program/net/201311/13441.html