User Control dan Parent ViewState
Tadi kebetulan ketemu kasus. Jadi gini, ada aplikasi ASP.NET 2.0 dimana loading contentnya semua diambil secara dinamis. Contentnya sendiri di load dengan cara memasukan string ke ViewState. Hmm…agak unik sih karena biasanya gw kalo mo naro referensi content selalu mengacu ke querystring
biar gak ribet.
Ini contoh Event Page_Load yang ada di Default.aspx Page sebagai master container
public void Page_Load(obj sender,EventArgs e){
/** check apakah referensi control sudah ada di Viewstate **/
if (ViewState["Control"] != null){
MainContent.Controls.Clear(); /** Hilangin semua control dulu **/
/** add to maincontent **/
MainContent.Controls.Add(LoadControl(ViewState["Control"].ToString())); }
}
Nah sekarang ada pertanyaan.
Gimana caranya untuk mengakses viewstate yang ada di Parent Page melalui UserControl ?
Jawabannya….binun juga. Karena gw dah terbiasa untuk memasukan referensi ke QueryString daripada ViewState. Tapi…..om Google punya beberapa jawabannya
1. Dengan cara membuat public properties di Parent Page, dengan cara itu, properties dapat diakses dengan mudah dari setiap childnya
public string LoadedControl{get{return ViewState["Control"].ToString();}}
Dari User Control, cara penggunaan menjadi
public void Test(){
string control = ((ParentPageType)Page).NameOfProperties;
MainControl.Controls.Add(LoadControl(control));
}
Tapi ….. Tapi lagi….Tapi Lagi…..CMIIW, ini hanya berlaku kalau project yang digunakan adalah Web Application Project bukan Website Project. Karena pada Web Application Project, semua sudah menjadi Typed Safe dan dapat dicast. Kalau di website hal ini bisa saja dikerjakan tapi perlu effort lebih (next time ya kita bahasnya)
2. Kalo yang ini lebih gampang, masukin aja ke MasterPage, tentukan ContentPage nya, masukin Page yang mau pake, definisikan ContentPlaceHoldernya….Selesai deh. Lebih lengkapnya cek MasterPage
Good Luck
Recent Comments