對用戶控件(ascx)屬性(property)賦值


Insus.NET寫此博文,是對用戶控件(ASCX)的屬性賦值經驗與技巧分享。
是這樣子的,在做新聞站點時,一般都會有分很多類別。 在站點首頁會顯示最新,最TOP 或最Hot的新聞或文章,而且是分類別來分的。因此,我們會設計成一個用戶控件,用戶控件的數據源均是來自Article這個表,只是傳入不同的category 的ID值和 Top幾條來實現。

用戶控件.cs大約如下,高亮代碼是兩個屬性,當然你的真實環境也許只有一個,或是更多的屬性。



現在來演示網頁引用用戶控件,並賦值,分幾種方法或是重構優化它們。
在創建一個網頁,也就是說,你的網點上,哪個網頁需要引用這個用戶控件。用戶控件呈現是需要在網頁aspx。

第一種,最簡單常用。打開.aspx,切換至design模式,



然后把用戶控件拉入網頁:



現在可以切換至source 模式,就可以直接在.aspx賦值了,參考高亮對屬性賦值。



第二種,如果你不想在.aspx賦值的話,可以在.aspx.cs進行賦值。把用戶控件引入網頁之后,按F7來到.aspx.cs代碼頁。




上面第一種方法與第二種方法,只是賦值的位置不同而已。
OK,我們來演示第三種方法。為了功力發揮最高效果,長遠的設計打算,因此Insus.NET先寫一個接口,接口主體是一個函數,返回類型就是UserControl。



用戶控件實作這個接口,參考下圖高亮部分代碼:



實現動態加載,不必在網頁中的design和source切換來切換去。在網頁中拉一個控件容器



去.aspx.cs代碼程序,參考下圖:

 

引用兩個命名空間#9和#10行代碼。其中#9代碼,是為了能夠應用到Reflection(反射)技術。
第#22行代碼,是動態加載用戶控件,並轉換為接口。
第#25和#31行代碼,箭頭位置的字符串,就是用戶控件的兩個Public屬性名稱。 

 

 

第#28和#34行代碼,即是對兩個屬性賦值。
第#37行代碼,是把用戶控件加載入PlaceHolder容器中去。

好的,三種方法,教你怎樣在網頁中,為用戶控件的屬性賦值。技術相信你增長不少吧。
整個演示已經完成。


接下為,Insus.NET再給你附送另外的技術,重構。你回過頭來看看第三種方法的代碼。第25至29與31至35兩組代碼,相似度都非常高。因此,減少代碼的冗余,需要把它們寫成一個方法。



拿掉上圖片中comment的代碼。抽取出來,寫成SetValue()方法。這樣子,代碼就變得清晰多了。成了這個樣子:

 完成否,還有嗎?
是的,沒有完成,重構到這里,Insus.NET有想起,每個用戶控件,屬性有少有多。少的話也許沒有什么關系,多的話,還得寫很多

SetValue(uc, "TOP", 10);    
SetValue(uc, "Category", 1);


這些相似的代碼。為了解決這個問題,Insus.NET再次重構它們。希望能得到更好的效果。



其實,還是可以把上圖中的第32行代碼,寫成一個擴展方法:



也就是說,把賦值部分,存放在一個集合中。
呵呵,完成了。方法可以選擇性,覺得那一種好,就用那一種。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM