ASP.NET控件開發(fā)的基本概念
我們繼續(xù)討論ASP.NET控件開發(fā)的一些東西.
這次我們要討論的是復合控件.本文無法一步到位完整介紹,因為討論的篇幅比較大,所以分兩次寫,這次就先講些基本概念吧,剩著的下次寫.好象復合控件網(wǎng)上已經(jīng)有很多教程了,相信大家也看過很多.如果看過的朋友就當我再廢話一便,沒看過的朋友希望能給你帶來幫助.
1.復合控件概念
復合控件跟用戶控件有很多相似點,***不同就是用戶控件后綴為ascx,而復合控件編譯后則為dll文件,還可以分發(fā)給大家使用,另外其他不同點還請參考MSDN吧,說白了,復合控件靈活性更大.
2.復合控件的呈現(xiàn)
(1)一般控件的呈現(xiàn)
從***篇到第六篇為止,我們用以呈現(xiàn)控件的方法介紹過的有Render方法和RenderContents方法.回顧一下吧,看以下其中的一小段代碼.
- publicoverridevoidRender(HtmlTextWriterwriter)
 - {
 - ..
 - writer.RenderBeginTag(HtmlTextWriterTag.Td);
 - writer.AddAttribute(HtmlTextWriterAttribute.Name,"CreditCardNo");
 - writer.AddAttribute(HtmlTextWriterAttribute.Id,"CreditCardNo");
 - writer.AddAttribute(HtmlTextWriterAttribute.Type,"text");
 - writer.RenderBeginTag(HtmlTextWriterTag.Input);
 - writer.RenderEndTag();
 - writer.RenderEndTag();
 
以前我們所做的控件都是上面這樣的寫法.我們可以認為在Render方法實現(xiàn)了以下兩個功能.
◆標簽布局(如td標簽,讓控件呈現(xiàn)的好看點-_-)
◆呈現(xiàn)的標簽(如input標簽)
(2)復合控件的呈現(xiàn)方法
我們知道ASP.NET控件開發(fā)里面已經(jīng)提供給了我們像TextBox這樣的控件了,就如組裝電腦一下,你可以組裝.net提供你現(xiàn)有的控件,然后重新拼湊成一個新的控件,這樣便成了復合控件.但其呈現(xiàn)方法卻又不同.
復合控件是以包含子控件的形式呈現(xiàn)的,具體的呈現(xiàn)交給子控件自己去做,因為子控件自身都已經(jīng)實現(xiàn)了其呈現(xiàn)方法(每個控件都繼承自Control類).假設你還不明白就看下面的圖吧.
LabelTextBox1為復合控件,LabelTextBox2則不是.兩者的呈現(xiàn)方式是不同的.具體實現(xiàn)方法請看下文

3.完成基本復合控件基本呈現(xiàn)
(1)首先你要熟悉以下的屬性和方法
◆Control.CreateChildControls 方法用于創(chuàng)建子控件
◆Control.EnsureChildControls 方法用于確認是否已創(chuàng)建子控件,如果未創(chuàng)建完成的話則調用CreateChildControls 方法創(chuàng)建子控件
◆Control.ChildControlsCreated 屬性 獲取一個值,是否已創(chuàng)建子控件
(2)了解并實現(xiàn)INamingContainer接口
用戶控件UserControl類則繼承了INamingContainer接口,確包保子控件具有唯一的ID名稱,那復合控件也需要實現(xiàn)這個接口達到一樣的目的,這個是值得注意的地方.
復合控件以類撰寫的方法來添加控件即CreateChildControls 方法,而非在Render方法中以下面方式實現(xiàn)
- writer.RenderBeginTag(HtmlTextWriterTag.Input);
 
4.控件狀態(tài)以及性能方面的選擇
上面的例子你會發(fā)現(xiàn),再點擊按鈕以后,textbox值狀態(tài)被保存了下來,還記得以前以Render方法直接呈現(xiàn)input標簽的控件嗎?在點擊按鈕以后textbox值狀態(tài)是無法保存的.
我們討論了數(shù)據(jù)回傳的一些知識,我們也定義了一個textbox控件,在點擊按鈕以后,可以***的保存其值狀態(tài).至于原因,還請大家參考下文,作者已經(jīng)分析的很清楚了.
ASP.NET控件開發(fā)速成教程:生成復合控件
雖然創(chuàng)作復合控件相對比較容易,但是由于在撰寫時必須創(chuàng)建子控件,所以會出現(xiàn)性能系統(tǒng)開銷。如果您想優(yōu)化控件的性能,可以通過重寫 Render 方法,自己實現(xiàn)呈現(xiàn)邏輯。另外,必須實現(xiàn)控件所需的任何回發(fā)數(shù)據(jù)處理和回發(fā)事件處理。
本來想一起把事件處理和樣式也寫完了,但想寫好篇幅太多了,這次就先寫到這里吧,因為想把自己心里的意思表達明白還真的需要費一定時間去想的.下次我們繼續(xù)討論復合控件的事件和樣式
【編輯推薦】















 
 
 
 
 
 
 