19 Ağustos 2012 Pazar

Web Page Life Cycle

ASP.NET tabanlı site hazırlarken gerek sunucu ile istemci arasındaki işleyişi izlemek gerekse web tabanlı özel kontrol geliştirirken request-response sürecindeki yol haritasını, Asp.NET yaşam döngüsünü bilmek sürece olan hakimiyetimizi artıracaktır. Asp.NET’in sayfa yaşam döngüsünde her request işleminde page nesnesi ve içindeki kontroller yeniden oluşturulur ve işlem sonucunda yok edilir. Bu oluşma-yok olma sürecinde bazı evre ve olaylar gerçekleşir. Bu evre ve olaylar, sayfa ve sayfa içerisindeki kontrollerin yaşam döngüsüyle ilintilidir. Burada Asp.NET yaşam döngüsünü hatırlayacak kadar burada özetlememiz faydalı olacaktır. Aşağıdaki tabloda sayfa ve kontrol bazlı yaşanan evreler gösterilmiştir.




Aşama Açıklama
Page request Page life cycle başlamadan önce bu aşama çalışır. Sayfa bir kullanıcı tarafından istendiği zaman Asp.NET, bu sayfanın parse ve compile edilip edilmeyeceğine veya sayfayı çalıştırmadan varsa cachedeki versiyonunu gönderip göndermeyeceğine karar verir.
Start Yaşam döngüsünün ilk adımını temsil eden bu süreçte page nesnesinin Request ve Response gibi property’leri set edilir. Ayrıca page nesnesi, gönderilen requestin bir Postback sonucu mu yoksa yeni bir request olarak gelip gelmediğini belirler ve ona göre IsPostBack property’sini set eder. IsPostBack, sayfanın Postback modunu bildirir. Bu aşamada ek olarak sayfanın UICulture propertysi de set edilir.
Page initialization Sayfanın oluşturulma aşamasında sayfa üzerindeki kontroller, erişilebilir duruma gelir ve her kontrolün UniqueID propertysi set edilir. Eğer o anki request, bir Postback sonucu gerçekleşmişse bu aşamada Postback data henüz yüklenmemiş ve kontrollerin değeri Viewstate’e göre yenilenmemiştir.
Load Load aşamasında eğer geçerli request bir postback ise kontrollerin değeri ve durumu Viewstate içeriğine göre şekillenir.
Validation Varsa sayfa üzerindeki validator kontrollerin Validate() metodu çağrılır. Validate() metodu, page nesnesi ve içindeki kontrollerin her birinin IsValid property’sini set eder. Hatırlanacağı gibi IsValid property’si, kontrolün doğrulama işleminin başarılı olup olmadığını bildirir.
Postback event handling Eğer request bir Postback sonucu gerçekleşmişse, Postback’i gerçekleştirmiş veya durumu değişmiş kontrollerin ilgili eventleri tetiklenir.
Rendering Render işleminden önce page ve kontroller için Viewstate nesnesi kaydedilir. Render aşamasında page nesnesi, her kontrolün Render() metodunu çalıştırır. Render() metodu, text writer nesnesini kullanarak kontrolün outputunu page’in Response propertysine ait OutputStream‘e (HTTP ile gidecek olan binary içerik) yazar.
Unload Unload evresi, sayfa tümüyle render edildikten ve istemciye gönderildikten sonra çağrılır. Bu durumda sayfa, artık hafızan kaldırılmaya (discard) hazırdır. Unload aşamasında, Request ve Response nesneleri temizlenmiş olur.