Öcelikle projemize sağ tıklayıp, add asp.net folder ve Theme diyip temamızı oluşturuyoruz. Temamızın içine css dosyası da ekledikten sonra basit olarak css'in içine arka plan rengi ve yazı rengi verelim. Örneğin bir mavi, bir de kırmızı temamız olsun. Bunun için şöyle bir css kodu yazalım,
Kırmızı Tema
body
{
background-color:Red;
color:White;
}
Mavi Tema
body
{
background-color:Blue;
color:White;
}
- Constructor
- PreInit
- Init
- Load
- PreRender
- UnLoad
metotları sırasıyla çalışır ve sayfa oluşur. Dolayısıyla, tema atama, setleme işlemleri de PreInit'de gerçekleştiğinden burada da PreInit metodumuzu yazıp, Temayı setleyelim.
protected void Page_PreInit(object sender, EventArgs e)
{
Theme = DropDownList1.SelectedValue;
}
Bu kodu yazdığımızda da şöyle bir sorun çıkar. Asp.Net kontrolleri Load eventinden önce oluşur fakat markuptaki halleriyle oluşur. Yani boş bir şekilde sadece DropDownList'in oluştuğunu görürüz. Load metodunda içi dolar. Dolayısıyla PreInit, Load'dan önce çalıştığından hata verecektir. Peki Load eventinden önce kontrollerin değerlerine nasıl erişiriz.
Cevap, Request nesnesi sayesinde. Aslında Load'da da Request ile erişebiliriz fakat, Visual Studio uzun uzun yazmayalım diye, öyle bir kolaylık sağlamış bize DropDownList oluştuğu için. Dolayısıyla PreInit'den seçilen değeri alabilmemiz için şu kodu yazmalıyız;
protected void Page_PreInit(object sender, EventArgs e)
{
if(Request.RequestType == "POST")
{
Theme = Request.Form["DropDownList1"];
}
}
kodu RequestType'ını kontrol etmemizin amacı, get taleplerinde var olan temayı default olarak vermek. Yani sayfa ilk açıldığında boş bir template ile açılsın, daha sonra dropdownlist post edildiğinde içindeki değer PreInit metodunda okunsun ve temamız değişsin. Ekran çıktısına baktığımızda ise şöyle bir sonuç görürüz;
0 yorum:
Yorum Gönder