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.




Åžubat 23rd, 2008 at 22:03
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
Åžubat 25th, 2008 at 16:09
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ı.
Mart 4th, 2008 at 00:57
Yazınız çok faydalı oldu teşekkürler..
Haziran 29th, 2008 at 17:24
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…
Haziran 30th, 2008 at 07:53
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,
Åžubat 18th, 2009 at 22:08
Cok faydali bir yazi olmus. Emeginize tesekkurler
Mayıs 22nd, 2009 at 21:38
Çok güzel açıklayıcı ve sade.
Temmuz 28th, 2009 at 16:07
makale için teÅŸekkürler…
Mart 25th, 2010 at 15:38
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.
Mart 31st, 2010 at 14:56
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.
Nisan 11th, 2010 at 18:22
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.
Nisan 24th, 2010 at 08:59
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ı.
AÄŸustos 16th, 2011 at 01:27
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…
Eylül 28th, 2011 at 14:02
Hocam çok teşekkürler, çok açıklayıcı ve yararlı bir makale.