或許大家還對為何要重寫Render方法存有疑惑,希望大家看看我舉的例子,能夠明白Render方法和其他兩個方法的作用,然後真正明白為何一般情況下只須重寫Render方法
我們知道我們每次編寫控件時,都需要重寫Render方法,我們發現在Control類中很多方法可以重寫,但我們沒有去重寫他們,我們需要遵循一個原則,在需要重載的時候再去重寫他們
我們還是先來看看與Render方法相關的兩個方法
//RenderControl方法的基本實現
public void RenderControl(HtmlTextWriter writer)
{
if(Visible)
{
Render(writer);
}
}
//Render方法基本實現
protected virtual void Render(HtmlTextWriter writer)
{
RenderChildren(writer);
}
//RenderChildren方式基本實現
protected virtual void RenderChildren(HtmlTextWriter writer)
{
foreach (Control c in Controls)
{
c.RenderControl(writer);
}
}
相信看過"ASP.NET服務器控件開發技術與實例"這本書的人,肯定看過上面的一段代碼.
假設你不理解上面的流程(我也不一定理解,希望我的思路對你有幫助),我認為有一種很好的方式來理解上面的流程,跟大家分享一下.
現在拋開上面的代碼,我們來建一個簡單的頁面,隨意的拖幾個控件到界面上,注意最後一個三panel控件,如下圖
圖一
我們知道,每個控件都有Visible和EnableViewState屬性,Visible用來設置控件是否被呈現.
圖二
現在我們把button控件的Visible屬性設置為flase,我們看到了我們預期的效果,接著請啟用頁面跟蹤,這個很重要
圖三
在服務器上運行這個頁面,大家可以在控件樹上看到下面畫面
圖四