控制項的呈現方法 Rendering 的核心

2021-08-21 23:28:37 字數 1524 閱讀 1391

asp.net中所有的控制項都是從system.web.ui.control類,在control類中定義了三個與呈現有關的方法,分別是render方法,renderchildren方法和rendercontrol方法.其中rendercontrol方法是public的方法,先看看這三個方法的實現:

public void rendercontrol(htmltextwriter writer)

}protected virtual void render(htmltextwriter writer)

protected virtual void renderchildren(htmltextwriter writer)

}rendercontrol方法用於供外部類進行呼叫,以生成控制項,如父控制項呼叫子控制項的rendercontrol方法.在rendercontrol方法只是作了是否顯示該控制項的判斷,如果顯示則呼叫控制項的被保護方法render.

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

所有的服務端控制項都是從system.web.ui.webcontrol中派生.而webcontrol又從control中派生,所以webcontrol具有上述的三個方法,但是又增加了幾個方法,它把render方法又細分成三個方法:renderbgegintag,rendercontents,renderendtag.render的實現**如下:

protected override void render(htmltextwriter writer)

public virtual void renderbegintag(htmltextwriter writer)

else

}protected virtual void rendercontents(htmltextwriter writer)

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

總結:

1.如果從control中派生,則應過載render()方法呈現控制項.如果控制項是乙個容器控制項,則應在render方法中呼叫基類的base.renderchildren()方法,呈現子控制項.

2.如果從webcontrol類中派生,分兩種情況,一種是利用tagkey屬性生成輸出的html標籤,這時應過載rendercontents()方法來呈現控制項.第二種是不想呈現預設的的用tagkey生成的html標籤,這時應過載render()方法來呈現控制項,如下**所示:

protected virtual void render(htmltextwriter writer)

protected virtual void rendercontents(htmltextwriter writer)

3.如果從webcontrol類中派生,並且該控制項是乙個容器控制項,則應在rendercontents中呼叫base.render()方法,以呈現子控制項.

ExtJS樹控制項,完成機構樹的呈現

這裡僅僅是乙個樹控制項的展現而已,並沒有做其他操作,其目的主要是熟悉使用extjs實現樹結構資料的展現。裡面的一些具體引數的含義參照文件,這裡我就把一些需要增加或修改地方的 貼出來 組織機構實體類 entity table name t org public class organization 是...

如何解決「呈現控制項時出錯」的問題

在製作控制項的時候容易遇到 呈現控制項時出錯 發生了未處理的異常。未將物件引用設定到物件的例項。這樣的錯誤,如下圖 也有可能僅僅只是因為未設定runat server 標籤而導致該錯誤,請先檢查該項。但是在編譯時 執行時也都是沒有錯誤的。分析 如圖所示的情況我們稱之為 設計時 以區別於 編譯時 執行...

如何解決「呈現控制項時出錯」的問題

在製作控制項的時候容易遇到 呈現控制項時出錯 發生了未處理的異常。未將物件引用設定到物件的例項。這樣的錯誤,如下圖 也有可能僅僅只是因為未設定runat server 標籤而導致該錯誤,請先檢查該項。但是在編譯時 執行時也都是沒有錯誤的。分析 如圖所示的情況我們稱之為 設計時 以區別於 編譯時 執行...