對使用者控制項 ascx 屬性 property 賦值

2022-02-13 19:11:34 字數 2265 閱讀 1278

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行**,寫成乙個擴充套件方法:

也就是說,把賦值部分,存放在乙個集合中。

呵呵,完成了。方法可以選擇性,覺得那一種好,就用那一種。

ascx使用者控制項操作

page.ascx 檔案 control language c autoeventwireup true codefile page.ascx.cs inherits page for int i 1 i this.pagecount i page.ascx.cs檔案using system usi...

對使用者控制項進行屬性封裝的使用情景分享(一)

使用者控制項為web開發帶來了許多便捷,比如方便布局,使設計介面層次清晰,還有模組的重用性等等。通常情況下我們使用使用者控制項是因為頁面某一模組在多個頁面出現。比如頁頭 頁尾等等。也有人為了頁面簡單而選擇將頁面拆分為多個使用者控制項實現布局。這裡想說的是比通常情況下略微特殊的使用狀態。看下面的頁面截...

對使用者控制項的訪問方式重寫

因為專案裡面需要記錄一下重寫的方法以備後用 首先增加乙個繼承ihttphandler的截獲類 上面類相關的東西 public class viewmanager t where t usercontrol public string renderview t control public class...