Javascript her ne kadar yazılımcıların kabusu gibi görünse de gitgide sevmeye başladım. Javasripti tecrübe etmeye devam ettikçe farklı durumlarla karşlılaşıyorum. İşinize yarayacağı umuduyla bu durumlardan birinden bahsedeceğim. Javascripti Update Panel içerisinden çağırıp kullanırken bir sorunla karşılaştım. Direkt olarak javascript kullanamıyorsunuz. Scriptinizi kullanabilmek için kullanacağınız javascripti register etmeniz gerekiyor. Bunun içinde ScriptManager.RegisterClientScriptBlock metodunu kullanmamız gerekiyor.
Hemen bu metodu nasıl kullanacağımıza bakalım. Bu metodun iki adet kullanımı vardır ;
RegisterClientScriptBlock(Control, Type, String, String, Boolean);
RegisterClientScriptBlock(Page, Type, String, String, Boolean);
RegisterClientScriptBlock(btnUyar, btnUyar.GetType(), “uyari1”, “alert(‘Selam.’)”, true);
RegisterClientScriptBlock(Page, GetType(), “uyari2”, “<script>alert(‘Selam.’)</script>”, false);
Yani burada bir kontrolü yada bir sayfayı parametre vererek javascriptimizi register ediyoruz. Parametrelere bakacak olursak Control yada Page scripti register eden nesneyi, Type bu nesnenin tipini, birinci string register ettiğimiz scriptin tekil anahtar adını, ikinci string register edeceğimiz scripti ve son sıradaki boolean parametrede script bloğunun kapatılıp kapatılmayacağını ifade eder. Buraya kadar yüzeysel olarak metodu inceledik. Şimdi neye göre Control yada Page parametresi alan overloaded metodu kullanmamız gerek, scrip bloğunu kapatıp kapatmama durumunu neye göre ayarlayacağız ve bu iki overload metodun yetmediği durumda ne yapmamız gerek buna göz atalım.
İki overloaded metodumuz var ve hangisi hangi durumda işimize yarar sorursuna en sadece şekilde şöyle açıklık getirebiliriz; eğer bir script bloğunun sayfa her postback olduğunda çalışması gerekiyorsa bunu sayfamızı parametre göndererek register ediyoruz, eğer metodumuzun sadece update panelimiz update olduğunda çalışmasını istiyorsak kontrol parametresiyle register ediyoruz.
Gelelim script bloğunun kapatılıp kapatılmama durumuna karar vermeye. Eğer script bloğuna attribute ekleyeceksek bu parametreyi false olarak ayarlamamız gerekmektedir. Bu durumda aklımızda olması gerekn bir şey var eğer birden fazla script bloğu sek ettiğimiz zaman hatayla karşılaşırız. Eğer script bloğuna <script> tagını otomatik eklenmesini istiyorsak bu parametreyi true olarak ayarlamamız gerekmektedir.
Bu arada eğer register edeceğiniz script bloklarının sırası önemliyse dikkat etmemiz gereken bir nokta daha var. Bu metod scriptleri sizin register ettiğiniz sıra içerisinde sayfaya eklemeyebilir. Eğer scriptlerinizin sırası önemliyse tek seferde register etmeniz en garantili yol.
Peki hepsini konuştuk iyi güzel ama ya update panele bağlı olarak scriptimizi register etmek istemiyorsak sadece bir kere sayfa render edilirken register etmek istiyorsak ne yapmamız gerekiyor ? İşte bu noktada ClientScriptManager.RegisterClientScriptBlock metodumuz bu noktada devreye giriyor. RegisterClientScriptBlock(Type, String, String) ve RegisterClientScriptBlock(Type, String, String, Boolean) olmak üzere iki kullanımı mevcut metodumuzun. Bu metodlar direkt sayfa üzerinden register olduğundan önceki kullanımdaki ilk parametre kullanılmıyor. İkisi arasındaki fark birincisinde <script> boğunu zorunlu olarak script stringine yazmamız gerekiyor. İkincisinde daha önceki kullanımdaki true-false durumuna göre ayarlamamız gerekiyor. Ayrıca bu metodunu kullanacağımız ClientScriptManager sınıfını türetirken ;
ClientScriptManager csm = Page.ClientScript;
csm.RegisterClientScriptBlock(this.GetType(), “Uyarı3”, “<script>alert(‘Selam.’)</script>”);
csm.RegisterClientScriptBlock(this.GetType(), “Uyarı4”, “alert(‘Selam.’)”, false);
şeklinde kullanıyoruz.
Umarım faydalu bir yazı olmuştur. İyi çalışmalar..
Teşekkürler.