ASP.NET自定義控件組件開發 第一章 第二篇 接着待續

     很感謝大家給我的第一篇ASP.NET控件開發的支持!在寫這些之前,我也看了一些例子,想選中一些好上手的例子,這樣,可能一些例子大家以前都見過,但是我想說:同樣是彈鋼琴,同樣一首“命運交響曲”,有的人彈的讓人蕩氣迴腸,有的人彈的就很一般。

         受了李建忠老師的啓發,發現用一種演化式的讓人更好的接受。

          好了,廢話不說了。繼續開發!希望大家支持!

 

     我們之前開發了一個很簡單的自定義的控件,方法很簡單,只是把原來的html文本傳入writer.Writer()方法的參數,然後輸出。其實從模式的角度看,這可說是個Template模式(只是提下而已,有興趣的朋友可以和我討論)!

     大家再來看看代碼:

 

Code

 

     我們發現,這個控件實現的很僵硬!因爲這個控件不像其他的服務器控件,我們這個控件沒有任何讓我們編輯的地方,也沒有一些讓我們設置的屬性。下面,我們就來讓控件“活”起來。給他一些可以編輯的屬性。

     首先我們還是從最簡單來看。

     相信大家都知道C#中的get ,set,我們總是把成爲“屬性”(Property),其實在控件開發的時候,就是用這些get, 和set來設置屬性的。

     先來看看這張圖片:

          

          大家都熟悉吧,就是我們之前前開發的那個控件的外觀。我們在拖控件是使用的時候,一般都要設置一些屬性,比如:Text,Name等等。當然,這裏也不例外,我們也設置這個控件的屬性,例如我們想讓控件左邊的文本改變,就像改變Text屬性,如下:

          

          這樣的控件就更加的靈活。下面來看看這樣開發這些屬性吧!

          用get和set

          如下:

 

Code

          這樣做以後,基本上就完成了我們之前的目的,可以設置控件的屬性了。注意:我們這裏實現的屬性是可讀寫的。大家可以根據情況來確定是只讀,還是隻寫!

          但是我們不要忘記了,控件的顯示是通過Render方法呈現在頁面的,我們要使得我們的控件可以改變屬性,改變呈現的方式,就要改改Render中的代碼:如下:

          

Code

 

          這裏,請大家注意代碼的第5,15,20,25,和47行,我們之前在前一個控件中是直接寫如字符串,這裏我們改變了寫法。用到了我們定義的那些get,set的屬性,來改變控件顯示。

          好了,這寫步驟完成之後,工作就差不多完成了。

 

          我想大家應該來記得我們平時用的控件,如下:

          

          例如上面的TextBox控件,他的屬性就顯示在屬性窗口,而且屬性都分了類,如”外觀“,”行爲“,而且沒有屬性下面都有註釋。大家注意途中的標記部分。

          

          我們上面的代碼確實已經爲控件添加了屬性,但是我們要讓我們開發的控件和現有的控件一樣,看起來更加的專業,我們就要實現一些顯示的代碼,使得我們的控件和現有的服務器控件一樣”好看,好用”。即,要有下面的效果:

 

          

          

          

                  

          這個控件看起來很專業吧!好了,我們來實現下:

          其實很簡單的,只要添加一些屬性(Attribute)標記

          

Code

 

     大家可以根據我的註釋再結合我上面的標記圖可以看看。然後其他的的一些get,set屬性都添加差不多,只是括號()內的文本,隨你寫而已!

     到此爲止,一個”好看“的控件就寫完了。至於“好用”,暫時不急,慢慢來!

     當我們把控件添加到頁面後,查看他的“源”看到的這樣的:

     

 

Code

     我們看到其他的一些控件的“源”,例如:

     

Code

 

          TextBox控件的很多的屬性都顯示在標記中了,我們也希望當我們的控件一拖上頁面的時候就顯示一些包含在標記中的屬性,如下:

          

Code

          怎樣做?

          也很簡單,加些Attribute標記就行了。

          這些的標記是類級別的,就是說,要用在類上,我們之前家的那些標記都用在字段上,級別不同。注意哦!

          如下:

Code

     注意:在{0}的冒號中之後的那個"CreditCardForm2“就是類的名字,不要寫錯,否就不行!還有runat='sever'一定要寫,其他的屬性你可以隨意加,但是要保證,那些你的家的屬性是我們定義了的。例如你還可以加

CreditCardNo='信用卡號',等等。這樣之後,我們的控件就更加的專業了!

 

整個代碼如下:大家多多提意見,如果我講不夠好就說,我儘量講的更加平實!

 

 

Code

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章