Asp.NET’in sayfa yaşam döngüsünde istemcinin yaptığı her istekte page nesnesi ve içindeki kontroller yeniden oluşturulur. Bu da sayfanın ve kontrollerinin yaşam döngüsü aşamalarını ntekrarlaması anlamına gelir. HTPP runtime’ın ProcessRequest metodun çağırmasıyla sayfa ve kontrollerin yaşam döngüsü tetiklenir. Yaşam döngüsü bazıları geliştirici tarafından kontrol edilebilecek bazıları da geliştiricinin müdahale edemeyeceği public olmayan aşamalardan oluşur. Kısaca yaşam döngüsü üç ana aşamadan ve bunların alt aşamalarından oluşur. Bu aşamalar;
- setup
- postback
- finalization
1. Setup
Aspx sayfasının kaynağındaki sınıfa bakılarak page nesnesi yaratılır. Kontrol ağacı yaratılarak sayfaya bağlanır. Sayfa üzerindeki kontroller, http context, request ve response nesneleri set edilir. Sayfanın neden işletildiği belirlenir (yeni bir istek, postback sonucu oluşan bir istek..). Ve Page nesnesi buna göre kendi içsel durumunu düzenler.
Aspx sayfasının kaynağındaki sınıfa bakılarak page nesnesi yaratılır. Kontrol ağacı yaratılarak sayfaya bağlanır. Sayfa üzerindeki kontroller, http context, request ve response nesneleri set edilir. Sayfanın neden işletildiği belirlenir (yeni bir istek, postback sonucu oluşan bir istek..). Ve Page nesnesi buna göre kendi içsel durumunu düzenler.
Preinit Event
IsPostBack, IsCallBack, IsCrossPagePostback propertylerinin değerleri bu aşamada okunabilir.Bütün kontroller bu aşamada yaratılmış ve default değerlerine set edilmiştir. Eğer kontrollerin idsi aspx kaynağında belirtilmediyse, bu aşamada o kontrollerin bir idsi yoktur. Sayfanın scroll pozisyonu ve post edilmiş veriler bu aşamada elde edilebilirdir. MasterPage’i veya temayı değiştirmek sadece bu aşamada mümkündür.
IsPostBack, IsCallBack, IsCrossPagePostback propertylerinin değerleri bu aşamada okunabilir.Bütün kontroller bu aşamada yaratılmış ve default değerlerine set edilmiştir. Eğer kontrollerin idsi aspx kaynağında belirtilmediyse, bu aşamada o kontrollerin bir idsi yoktur. Sayfanın scroll pozisyonu ve post edilmiş veriler bu aşamada elde edilebilirdir. MasterPage’i veya temayı değiştirmek sadece bu aşamada mümkündür.
Init Event
Master Page ve tema artık değiştirilemez. PreInit aşamasında idleri olmayan kontrollere id atanır. Bütün kontrollerin OnInit event’i tetiklenerek kendi durumlarını ilklemeleri sağlanır. Bu aşamada viewstate henüz yüklenmemiştir.
Master Page ve tema artık değiştirilemez. PreInit aşamasında idleri olmayan kontrollere id atanır. Bütün kontrollerin OnInit event’i tetiklenerek kendi durumlarını ilklemeleri sağlanır. Bu aşamada viewstate henüz yüklenmemiştir.
InitCompleteEvent
İlkleme aşamasının bitiş eventidir. Bu iki aşama arasında view-statede yapılan değişikliklerin izlenmesi aktif hale getirilir. View-state’i takip edilen kontrollerde, kontrole programsal olarak eklenen herhangi bir değer viewstate koleksiyonuna da eklenir. Böylece bu değerler postback sırasında kaybolmaz.
İlkleme aşamasının bitiş eventidir. Bu iki aşama arasında view-statede yapılan değişikliklerin izlenmesi aktif hale getirilir. View-state’i takip edilen kontrollerde, kontrole programsal olarak eklenen herhangi bir değer viewstate koleksiyonuna da eklenir. Böylece bu değerler postback sırasında kaybolmaz.
ViewState’i Yükleme
Sayfa bir postback isteği sonucunda işletiliyorsa, __VIEWSTATE gizli sahasından bütün kontrollerin sayfanın tarayıcıya en son gönderildiğindeki durumları alınarak yüklenir. Böylece son istekle şu anki durum eşitlenmiş olur. ASP.NET, sayfadan gelen ViewState'in içeriğindeki veriyi almak için LoadViewState metodunu kullanır. Bu metod override edilebilir bir metodtur.
Sayfa bir postback isteği sonucunda işletiliyorsa, __VIEWSTATE gizli sahasından bütün kontrollerin sayfanın tarayıcıya en son gönderildiğindeki durumları alınarak yüklenir. Böylece son istekle şu anki durum eşitlenmiş olur. ASP.NET, sayfadan gelen ViewState'in içeriğindeki veriyi almak için LoadViewState metodunu kullanır. Bu metod override edilebilir bir metodtur.
Posted Data’yı İşleme
HTTP Request ile birlikte gelmiş Postback data okunur ve ilgili kontrollere yüklenir. <form> tagi ile belirtilmiş gizli sahalar bu aşamada işlenir. Bir server kontrolü IPostBackDataHandler arayüzünü implemente ederek posted data ile ilgilendiğini belirtir. Page sınıfı gönderilen posted datadaki ilgili kontrolü bulur ve kontrolün IpostBackDataHandler arayüzünü implemente edip etmediğine bakar. Eğer kontrol bu arayüzü implemente ediyorsa, kontrolün durumunu güncellemek üzere interfacedeki LoadPostData methodu çağırılır.
HTTP Request ile birlikte gelmiş Postback data okunur ve ilgili kontrollere yüklenir. <form> tagi ile belirtilmiş gizli sahalar bu aşamada işlenir. Bir server kontrolü IPostBackDataHandler arayüzünü implemente ederek posted data ile ilgilendiğini belirtir. Page sınıfı gönderilen posted datadaki ilgili kontrolü bulur ve kontrolün IpostBackDataHandler arayüzünü implemente edip etmediğine bakar. Eğer kontrol bu arayüzü implemente ediyorsa, kontrolün durumunu güncellemek üzere interfacedeki LoadPostData methodu çağırılır.
PreLoad Event
Bu event sayfanın ilkleme aşamasından çıktığını ve kullanıcı kodunun sayfanın işletimini yapılandırabileceği aşamaya geçtiğini gösterir.
Bu event sayfanın ilkleme aşamasından çıktığını ve kullanıcı kodunun sayfanın işletimini yapılandırabileceği aşamaya geçtiğini gösterir.
Load Event
Load event’i önce sayfa daha sonra ise sayfanın bütün kontrolleri için çağırılır. Bu aşamada sayfadaki bütün kontroller yaratılmıştır. Kontroller bir önceki durumları ve post edilmiş veriler güncellenmiştir. Kontroller ve viewstate artık kararlı bir duruma gelmiştir.
Load event’i önce sayfa daha sonra ise sayfanın bütün kontrolleri için çağırılır. Bu aşamada sayfadaki bütün kontroller yaratılmıştır. Kontroller bir önceki durumları ve post edilmiş veriler güncellenmiştir. Kontroller ve viewstate artık kararlı bir duruma gelmiştir.
PostBack’i Yönetme
Sayfa ilklemesinden ve posted veriler işlendikten sonra postback işlemlerini yaratan eventler tetiklenir. Başlıca iki tip event gerçekleşir. Bunlardan ilki belirli kontrollerin durumunun değiştiğini gösterir. Bir textbox’ın TextChanged eventinin tetiklenmesi buna bir örnek olarak verilebilir. Bu aşamada IPostBackDataHandler arayüzünün RaisePostDataChangedEvent metodu çağırılır. Bu durum kontrolün ASP.Net uygulamasına durumunun değiştiğini bildirebilmesini sağlar. Bu metodun implementasyonu kontrola bırakılmıştır.
Sayfa ilklemesinden ve posted veriler işlendikten sonra postback işlemlerini yaratan eventler tetiklenir. Başlıca iki tip event gerçekleşir. Bunlardan ilki belirli kontrollerin durumunun değiştiğini gösterir. Bir textbox’ın TextChanged eventinin tetiklenmesi buna bir örnek olarak verilebilir. Bu aşamada IPostBackDataHandler arayüzünün RaisePostDataChangedEvent metodu çağırılır. Bu durum kontrolün ASP.Net uygulamasına durumunun değiştiğini bildirebilmesini sağlar. Bu metodun implementasyonu kontrola bırakılmıştır.
Diğeri ise istemcinin yaptığı işlem ile oluşan postback sonucunda işletilen eventlerdir. Örneğin bir buton tıklandığı zaman işlemci butonun IPostBackDataHandler RaisePostDataChangedEvent metodunu çağırır. Her kontrol implementasyonunu kendi yapar ve kontrolden kontrole değişiklik gösterebilir. Örneğin Buton ise kullanıcının postback işlemiyle ilgili kodu yazabileceği OnClick gibi bir eventi tetikler.
LoadComplete Event
LoadComplete eventi sayfanın hazırlanma aşamasının bittiğini gösterir. Sayfadaki hiçbir child control bu eventi almaz. Bu aşamadan sonra sayfa rendering aşamasına girer.
LoadComplete eventi sayfanın hazırlanma aşamasının bittiğini gösterir. Sayfadaki hiçbir child control bu eventi almaz. Bu aşamadan sonra sayfa rendering aşamasına girer.
2. Finalization
Bu aşamada, sayfa tarayıcı için bir markup üretmeye hazır duruma gelmiştir. Bu aşamayı pre-rendering ve markup üretimi olmak üzere iki basamakta inceleyebiliriz.
Bu aşamada, sayfa tarayıcı için bir markup üretmeye hazır duruma gelmiştir. Bu aşamayı pre-rendering ve markup üretimi olmak üzere iki basamakta inceleyebiliriz.
PreRender Event
Sayfa ve kontroller için bir çıktı üretilmeden ve Viewstate kaydedilmeden önce yapılacak değişiklikler bu aşamada yapılır. Bu event önce sayfada daha sonra ise bütün çocuk kontrollerde çağırılır.
PreRenderComplete Event
Pre-render aşamsında sayfanın bütün kontrollerinde tekrarlı olarak çağırıldığı için, geliştiricinin pre-render aşamasının tamamlandığını bilmesinin imkanı yoktur. Bunun için sadece sayfaya özel bu event çağırılır.
Pre-render aşamsında sayfanın bütün kontrollerinde tekrarlı olarak çağırıldığı için, geliştiricinin pre-render aşamasının tamamlandığını bilmesinin imkanı yoktur. Bunun için sadece sayfaya özel bu event çağırılır.
SaveStateComplete Event
Her kontrol markup’ının üretilmesi için render olmadan önce kontrollerin ve sayfanın o anki durumu sunucuya yapılacak bir sonraki istekte hatırlanabilmesi için Viewstate nesnesine kayıt edilir. Bu aşamadan sonra yapılacak olan her değişiklik render işlemini etkileyecektir. Fakat viewstate nesnesine kaydedilmediği için bir sonraki postbackte kalıcı olmayacaktır. ViewState’i kaydetme işlemi her kotrolün ve sayfanın SaveViewState metodu çağırılarak yürütülen yinelemeli bir işlemdir.
Her kontrol markup’ının üretilmesi için render olmadan önce kontrollerin ve sayfanın o anki durumu sunucuya yapılacak bir sonraki istekte hatırlanabilmesi için Viewstate nesnesine kayıt edilir. Bu aşamadan sonra yapılacak olan her değişiklik render işlemini etkileyecektir. Fakat viewstate nesnesine kaydedilmediği için bir sonraki postbackte kalıcı olmayacaktır. ViewState’i kaydetme işlemi her kotrolün ve sayfanın SaveViewState metodu çağırılarak yürütülen yinelemeli bir işlemdir.
Markup Oluşturulması
Browser için markup’ın üretilmesi aşaması, her bir kontrol kendi markup’ını render etmesi ile işlemini içerir. Bazı overridable metodlar geliştiricinin markup üretimine müdahalede bulunabilmesine olanak sağlar.
Browser için markup’ın üretilmesi aşaması, her bir kontrol kendi markup’ını render etmesi ile işlemini içerir. Bazı overridable metodlar geliştiricinin markup üretimine müdahalede bulunabilmesine olanak sağlar.
Unload Event
Render aşamasından sonra önce kontrollerin unload eventi daha sonra da sayfanın unload eventi tetiklenerek son temizlik işlemlerinin yapılır. Bu metod açık kalmış dosya ve database bağlantıları kapatmak gibi işlemler için kullanılabilir.
Render aşamasından sonra önce kontrollerin unload eventi daha sonra da sayfanın unload eventi tetiklenerek son temizlik işlemlerinin yapılır. Bu metod açık kalmış dosya ve database bağlantıları kapatmak gibi işlemler için kullanılabilir.
Şekil1. ASP.NET Page Lifecycle |
Referanslar
Özlem KARAGEDİK
Tebrik Ederim Sizi. Kısa ama açıklamalı bir anlatım olmuş
YanıtlaSil