ASP.NET Page Life Cycle(Sayfa Yaşam Döngüsü)

C#, VB.NET, ASP.NET Add comments

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.

Döngünün bu evrelerinde zamanı geldikçe ilgili event ve metodlar otomatik olarak tetiklenir. Bunları da şu şekilde özetleyebiliriz;

1.Page_PreInit

IsPostBack property’si okunup sayfanın ilk defa process edilip edilmediÄŸi öğrenilebilir. Dinamik kontrollerin oluÅŸturulması, master page‘in programatik olarak uygulanması, theme propertysinin dinamik olarak set edilmesi bu metod içinde yapılır. Ayrıca bu metod içinde profile property’si okunabilir veya set edilebilir.


2.Page.Init + Control.Init

Döngünün ilk aşaması olan Initialization evresinde sayfaya ait control tree, tanımlı kontrollerle şekillenir ve önce page nesnesine ait Init eventi daha sonra her kontrolün ayrı Init eventi tetiklenir. Viewstate bilgisi henüz yüklenmemiştir.

3.Page.LoadViewState

Initialization aÅŸamasından sonra ASP.NET, sayfanın Viewstate’ini yükler. Viewstate, sayfanın sunucuda en son process edilmiÅŸ durumunu içerir.

4. Page.ProcessPostData

Request ile birlikte gelmiş Postback data okunur ve ilgili kontrollere yüklenir


5. Page.Load + Control.Load

Sayfa üzerindeki kontroller, tümüyle yüklendikten sonra Load eventleri tetiklenir. Bu metoda, genellikle sayfa ilk defa çağrıldığı(Postback edilmediği) zaman yapılacak data binding işlemleri yazılır.


6. “Change” Events

Kontrollerin yeni deÄŸerleri(Postback) ile orijinal deÄŸerleri(Viewstate) karşılaÅŸtırılır ve durumu deÄŸiÅŸmiÅŸ kontrollerin ilgili eventleri tetiklenir.(TextChanged, SelectedIndexChanged …)


7. Validate

Sayfa üzerindeki validatorlerin server side eventleri tetiklenir. Böylece doğrulama işlemi sadece istemci tarafına bırakılmamış olur.

8. “Postback” Events

Postback işlemine neden olmuş kontrollerin eventleri çalışır. Örneğin bir buton tıklandığı zaman yapılacak işlemleri bu aşamada Button.Click, Button.Command gibi metodlarda bildiririz.


9. Page.PreRender + Control.PreRender

Sayfa render edilmeden ve Viewstate kayıt edilmeden önce yapılacak işlemler bu metodlarda yazılabilir. Özellikle kontroller üzerinde yapılacak son değişiklikler bu aşamada yapılır.


10. Page.SaveViewState

Kontrollerin yeni değerleri ve sayfanın durumu sunucuya yapılacak bir sonraki dönüşte hatırlansın diye Viewstate nesnesine kayıt edilir.


11. Page.Render

12. Page_Unload


Temizlik işlemlerinin yapıldığı bu evrede sayfa istemciye gönderilmiştir. Bu metodu açık kalmış dosya ve database bağlantıları kapatmak veya request-response ile ilgili loglama yapmak gibi işlemler için kullanılabilir.

14 Responses to “ASP.NET Page Life Cycle(Sayfa YaÅŸam Döngüsü)”

  1. Dogan Says:

    Merhaba Ahmet Bey
    Emekleriniz için ne kadar teşekkür etsem azdır.
    Ben asp.net c# ve sql server ı çok iyi öğrenmek istiyorum. Çalışmalara başladım fakat bu konuda bana yol gösterirseniz sevinirim.

    Özel ders alabileceğim konusunda mükemmel öğretmenlere ihtiyacım var.
    tek hedefim bu c# ve sql programlamayı çok iyi öğrenmek istiyorum.

    amacım web programlama

    Saygılar Sunarım
    Çalışmalarınızda Başarılar

  2. Ahmet Kaymaz Says:

    Merhaba DoÄŸan,

    sana bazı tavsiyelerde bulunabilmek için yazılım geçmişini, deneyimini bilmem gerekiyor. Eğer yolun başındaysan öncelikle web mimarisini, html dilini, başlangıç olarak javascript bilmen web programlamaya hakimiyetini artıracaktır. Ardından veya bunlara paralel olarak veritabanı mantığı(MS Access veya SQL Server üzerinde çalışarak), SQL dilini, query hazırlama, yazılım algoritma, C# programlama dilini, OOP yöntemini sırasını takip edebilirsin.

    Özellikle .NET platformuyla web veya windows uygulama geliştirmek çok kolaylaştı. Bunların kodlamasını bir şekilde öğrenirsin önemli olan yazılım geliştirme algotirmanı geliştirmendir. Büyük resmi görmek için çoğu zaman sadece coder olmak yetmiyor. Bu algoritmik bakış hem database modellerken hem de C# ile kodlama yaparken yaptığın işin kalitesini artıracaktır.

    Özel eÄŸitime gelince. Bunu pek tavsiye etmiyorum. En azında kendimi senin yerine koyduÄŸumda bunun katma deÄŸerinin fazla olacağına inanmıyorum. Bunun için piyasada bulunan eÄŸitim kurumlarını deneyebilir veya internet’teki kaynakları kullanabilirsin. EÄŸitim kurumları için temelinin olması iÅŸini kolaylaÅŸtıracaktır. Yani baÅŸlangıcı, doÄŸrudan bir eÄŸitimin kurumunda yapmak bana pek mantıklı gelmiyor. parana ve emeÄŸine yazık olabilir. Bunun için kendi çabalarınla önce bir altyapı oluÅŸturman gerekiyor.

    Yine de dediğim gibi bundan sonraki yol haritası senin bilgi birikimine ve deneyimine varsa akademik geçmişine bağlı.

  3. özgür Says:

    Yazınız çok faydalı oldu teşekkürler..

  4. Hüseyin Says:

    Merhaba Ahmet BEY,

    Ben üçüncü kuşak dillerle (Pl/1,Cobol,vb) kurumsal uygulamalar tasarladım,geliştirdim, eğitim düzeyim de buna uygun.
    web tabanlı uygulamalar konusunda hiç deneyimim olmadı ama çok merakım var. bu mertakımı bir hobi olmaktan daha çok profesyonel bir yapıya dönüştürmek istiyorum. Bu konuda nette yaptığım araştırmalarda; asp.net,C# ve Veri tabanı konusunda çalışmam gerektiğine inandım. Bu konudaki tavsiyelerinize ihtiyacım var. Görüşünüzü e-mail yoluyla yazarsanız sevinirm.
    İyi çalışma dileklerimle…

  5. Ahmet Kaymaz Says:

    Merhaba Hüseyin Bey,

    Günümüzde herşeyin webe endexli olması, birçok paket programın web versiyonunun daha tercih edilmesinden dolayı en kısa zamanda web ortamına geçmekle doğru karar vermiş olursunuz. Şu anda web uygulamaları için en uygun platform hiç şüphesiz .NET platformudur.
    .NET’te web uygulama geliÅŸtirmek için herhangi bir .NET Framework tabanlı dil(C#, VB.NET, Delphi) ve bir veri tabanı (MS Access, MS SQL Server, Oracle) bilmeniz gerekir. Ben kiÅŸisel olarak, C# ve SQL Server tavsiye ederim. Bunlarla birlikte web uygulamalarının istemci tarafı da önemli olduÄŸu için JavaScript ve HTML dillerini de zamanla öğrenmeniz faydanıza olacaktır.

    KiÅŸiye göre deÄŸiÅŸse de size tavsiyem öncelikle web uygulamalarının mimarisini öğrenmenizdir. Bunun için bir html dokümanıyla webe giriÅŸ yapabilirsiniz. Ardından eÄŸer zaman kaybı olmayacaksa bir kaç basit asp uygulaması yapabilirsiniz. Daha sonra gerçek bir programlama dili olan C#’a geçiÅŸ yaparsınız.

    Bir şekilde kod yazarsınız hiç önemli değil. Önemli olan web uygulamasının algoritmasına, çalışma biçimine hakim olmanız. Web uygulaması, desktop uygulamasından farklı bir yapıda olduğu için biraz zorluk çekebilirsiniz. Bir e-book ile web uygulamalarının kavramlarına aşina olmanız işin başlangıcı için doğru bir karar olacaktır. Birçok kişi için gereksiz görülse de benim fikrim ilk önce HTML dilini öğrenmek ardından dinamik web uygulamalarına geçmektir.

    HTML dili http://www.w3.org/html/ adresinden başka bir kaynağa ihtiyacının olmayacağını düşünüyorum. ASP.NET için de ilgili Türkçe sitelerine takılabilir ve bir kitapevine gidip ASP.NET ile ilgili dili, anlatımı, örnekleri size uygun düşen bir kitap seçebilirsiniz.

    Yorumumu, size mail ile gönderdim. Bu değerlendirmenin başkası için de bir yanıt olacağını düşünerek buraya da ekledim.

    Kolay gelsin,

  6. Kanle485 Says:

    Cok faydali bir yazi olmus. Emeginize tesekkurler

  7. Cihan Yakar Says:

    Çok güzel açıklayıcı ve sade.

  8. Aybar Dumlu Says:

    makale için teÅŸekkürler…

  9. Mustafa Says:

    Merhaba Ahmet bey,

    Yukaridaki aciklamalariniza ek olarak benimde bir sorum olucak. Web tasarimi icin en uygun secimin .Net platformu oldugundan bahsetmisiniz. Neden php yerine .Net ile calismaliyiz? .Net’in avantajlari nedir php ile karsilastirdigimiz da? Neden Facebook gibi bir cok buyuk websitesi php tercih etmektedir? Bende .Net uzerinde kendimi gelistirmeye calisan biriyim. Fakat yukardaki sorulara yorum yaparsaniz eminim bir cok arkadasimi ve beni de bu konuda bilgiilendirmis olacaksiniz. Simdiden teskkurler.

  10. cenk Says:

    hocam elinize sağlıkta.burdaki yazı msdn.microsoft.com adresindeki yazının birebir kopyası.En azından sizde birşeyler ilave etseymişsiniz çok daha güzel olacakmış.Yinede elinize sağlık.

  11. Ahmet Kaymaz Says:

    Cenk,

    bu konu nihayetinde yoruma dayalı bir konu olmadığı için doÄŸrudan Microsoft’tan okuyarak yazmamı mantıklı buluyorum. Ayrıca sen benim yerimde olsaydın ne eklerdin merak ediyorum.

  12. Cenk Says:

    Hocam bu konu ile ilgili bilgim olsaydı zaten sitenizi ziyaret etme gereği duymazdım.

    Fikrimce asp.net öğrenme yolundaki en önemli konuların başında page life cycles geliyor.Microsoft’ tan okuyarak bizi bilgilendirmenizde hem ayrı bir meziyet, hemde bencede mantıklı bir durum.TeÅŸekkür ediyorum.

    Sorunuza gelince.Sizin yerinizde olsaydım bende microsofttaki kaynaktan yararlanır ancak birebir kopyasını yazmazdım.Ek olarak üzerine koyabileceÄŸim bir durum göremiyorsam; en azından bu yazıyı msdn’ den aldığıma dair küçük bir dipnot düşerdim.

    Bilgi paylatıkça artar.Ama birazda emeğe saygı.

  13. Osman Says:

    Ahmet Bey makalelerinizin birkaçı okudum.Makalelerinizde anlattığınız konuları derinliklerine kadar incelediÄŸiniz için size teÅŸekkür etmek istedim.Saygılarımla…

  14. Burak TARHANLI Says:

    Hocam çok teşekkürler, çok açıklayıcı ve yararlı bir makale.

Leave a Reply


8 − 4 =

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS GiriÅŸ