ana sayfa > Asp.NET > Sys.WebForms.PageRequestManager

Sys.WebForms.PageRequestManager

Sayfamıza bir UpdatePanel eklediğimizde otomatikman bir alt render motoru eklemiş oluruz. Yani o updatepane içeriği sayfanın geri kalanından bağımsız olarak sunucuya gidip gelmeye başlıyordu.  Bunun ingilizcedeki karşılığı “partial-page rendering”.  Başka bir deyişle aynı sayfa içinde çalışan, ama birbirinden bağımsız olarak sunucuya gidip gelen sayfa bölümleri de diyebiliriz. Ve sayfamıza ne kadar UpdatePanel eklersek o kadar çok birbirinden bağımsız render motoru  (partial-page rendering) eklemiş oluruz.

Peki sayfa içindeki render motorlarını kim organize ediyor?  Bunu yapan  Ms Ajax Libary içinde bulunan ve ScriptManager in bir parçası olan PageRequestManager sınıfıdır.  

 PageRequestManager ile neler yapabilriz? 


* Partial-page rendering için özel hata mesajları yönetimi oluşturabiliriz. Yani hata mesajlarını daha detaylı olarak denetleyip kendi belirlediğimiz javascript fonksyonlarına bağlayabiliriz (error message handling). 

* Çoklu asenkron post-back i istemci tarafında derinlemesine kontrol edebiliriz. Veri gidiş gelişi başladı, bitti, yükleniyor gibi durumları ve olayları kontrol edebilir ve oluşan tüm Dom Event lerini kendi belirlediğimiz özel javascript fonksyonlarına bağlayabiliriz. 
* Sayfa durumunda sürekli haberdar olabiliriz; yani handi updatepanelin postback i başlattığı, hangi elementin olayı başlattığı gibi.. 
* Kullanıcıya kalmadan, kendimiz tüm parametrelerini istediğimiz gibi ayarlayarak bir asenkron postback i tetikleyebiliriz. 

PageRequestManager sınıfı ScriptManager kütüphanesinin bir parçası olduğu için öncelikle sayfamıza bir adet ScriptManager eklemeliyiz. Ve de ScriptManager in EnablePartialRendering özelliği mutlaka true değerinde ayarlanmış olmalı. Bildiğim kadarı ile Ms Ajax ın yeni versiyonlarında bu zaten default olarak true olarak geliyor ve extradan belirtmemize gerek yok ama yinede kulağımıza küpe olsun diyelim. 

Bilmemiz gereken şeylerden biri de sayfamızda sadece bir tane PageRequestManager nesnesi olur. Yapılan tüm işlemler bu tek nesne üzerinden devam eden bir olaylar döngüsüdür.  Aslına bakarsanız hiçbir zaman PageRequestManager  sınıfından biz nesne üretemiyoruz.  Bu nesnenin üretilişi ve sonlandırılışı ScriptManager in tekelinde. Sayfada herhangi bir partial-page rendering durumu başladığında script manager in kendisi PageRequestManager tipinde bir nesne üretiyor. Biz sadece client tarafında yaratılmış olan halihazırdaki bu nesneyi çağırarak kullanıyoruz. Kendimiz yeni bir tane yaratamıyoruz. 

Dilerseniz öncelikle PageReuestManager in olaylarını (events) inceleyelim; ki bu olaylara istediğimiz javascript kodu bağlayabiliriz (handle edebiliriz). Bu olaylar ile ilgili olarak anlamamız önemli bir nokta: bu olayların her bir asenkron postback için tekrar tekrar oluştuğudur. Sayfamızda bir den fazla updatepanel olabilir. Ama PageRequestManager sınıfına ait tek bir nesne sayfanın yaşam döngüsü içerisinde sürekli bu olaylara maruz kalır. Ve biz hangi controlün olayı tetiklediğini veya hangi updatePanel in postback durumuna geçriğini bilmek isteyebiliriz. Bunu da javascript fonksyonlarımıza atadığımız argümanlar ile elde edeceğiz. 

Bu konuyu örnekler ile ele alacağız. Şimdi PageRequestManager in postback döngüsü içinde tetiklenen olaylarına bir gözatalım: 

initializeRequest  
Postback isteğinin hemen öncesinde tetiklenen olaydır. Gerekli objeler client tarafında yaratılır. Olay bilgisi InitializeRequestEventArgs objesi ile olayın fonksyonuna aktarılır. Böylece fonksyonun formal parametreleri ile asenkron postback i tetikleyen nesneyi elde edebiliriz. 

beginRequest initalizeRequest ten sonra çalışır. İstek  sunucuya gönderilmeden hemen önce tetiklenen olaydır. Objeler bir önceki olayda oluşturulmuştur (initalize edilmiştir). Olay bilgisi fonksyone BeginRequestEventArgs objesi ile aktarılır. Bu obje de yine postback e sebep olan sayfa elementini elde eder. (initalizeRequest te olduğu gibi.) 

pageLoading 
Son postback talebi için sunucu istemciye cevap gönderdiği anda ortaya çıkar. Yine client tarafında tetiklenir ve sunucunun cevabı henüz yeni gelmiştir. Ve henüz sayfamızda herhangi bir güncelleme yapılmamıştır. Bu olayın bilgisi fonksyonumuza PageLoadingEventArgs objesi ile aktarılır. Daha sonrada sayfamızda istediğimiz güncellemeleri yapabiliriz. 

pageLoaded 
Son postback in ardından sayfamızın ilgili alanları güncellendikten sonra(!) bu olay tetiklenir. Olay bilgisi PageLoadedEventArgs objesi ile fonksyona aktarılır. Bu hangi panellerin yaratıldığı yada güncellendiği bilgisidir. Senkron postback lerde  paneller sadece yaratılabilir. Ama asenkron postback lerde hem yaratılır hemde update edilebilir. 

endRequest 
Tüm postback istemi tamamlandığında tetiklenen olaydır. Olay bilgisi fonksyona EndRequestEventArgs objesi ile gönderilir. Bu obje varsa meydana gelen hataların bilgisini aktarır. Ayrıca response objesini de yaratır. Bu olayı işlemin bitiminin ardından kulanıcıya bildirim göstermek ya da hataları yönetmek için kullanabilriiz. 
 

Yazının orjinal kaynağı ve devamı http://polimeraus.blogspot.com.tr/2010/09/syswebformspagerequestmanager.html adresindedir.

Categories: Asp.NET Tags:
  1. şimdilik yorum yok.
  1. şimdilik geri bağlantı yok
yorum yapabilmek için giriş yapmalısınız