Bu yazımda Asp.Net’e yeni başlayanlar ile C#’da masaüstü uygulama geliştirip daha sonra web uygulamalarına geçiş yapanların başlangıçta anlamakta zorlandığı postback, ispostback ve autopostback kavramlarına değineceğim.
PostBack Nedir?
İstemci bir talepte bulunduğunda sayfa sunucuya postalanır ve belirtilen işlemler sunucuda yapıldıktan sonra sayfa tekrar kendisine yönlendirilirse bu işleme postback adı verilir.
Konunun daha iyi anlaşılabilmesi için aşağıdaki örneği inceleyelim. Örneğimizde sayfa yüklendiğinde (Page Load olayı ile) DropDownList’e bazı iller ekleniyor. Sonrasında butona tıklayarak bir ilin daha listeye eklenmesini istiyoruz. Aşağıdaki kodlar ve ekran görüntüsü yardımıyla formumuzu oluşturalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
protected void Page_Load(object sender, EventArgs e) { DropDownList1.Items.Add("İstanbul"); DropDownList1.Items.Add("Ankara"); DropDownList1.Items.Add("İzmir"); DropDownList1.Items.Add("Bursa"); DropDownList1.Items.Add("Antalya"); } protected void Button1_Click(object sender, EventArgs e) { DropDownList1.Items.Add("Eskişehir"); } |
Butona tıkladığınızda Eskişehir ilinin listenin sonuna ekleneceğini düşünüyorsanız yanılıyorsunuz. Butona tıkladıktan sonra aşağıdaki gibi bir sonuç ile karşılaşırsınız.
Neden böyle bir sonuçla karşılaşıyoruz. Çünkü DropdownList kontrolümüzün viewstate durumu aktif. Bu durum sayfa postalandığında form verilerinin silinmesini engeller, sayfa tekrar yüklendiğinde ise form_load olayı tekrar çalıştırılır ve ikinci kez aynı veriler yüklenir. Bu durumu düzeltmek için IsPostBack özelliğinden faydalanılır.
IsPostBack Özelliği ve Kullanımı
Yukarıdaki bahsettiğimiz sorunun, çözüm yöntemlerinden biri sayfanın ispostback özelliğinin kullanılmasıdır. IsPostBack, sayfanın geri postalanması durumunu yönetir. Bu özellik, sayfanın ilk kez yüklenmesi ile sonradan postback işlemi sonucunda yüklenmesi arasındaki farkı yönetmek için kullanılır.
Yukarıdaki örneğimizi aşağıdaki gibi değiştirirsek sorun çözülecektir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { DropDownList1.Items.Add("İstanbul"); DropDownList1.Items.Add("Ankara"); DropDownList1.Items.Add("İzmir"); DropDownList1.Items.Add("Bursa"); DropDownList1.Items.Add("Antalya"); } } protected void Button1_Click(object sender, EventArgs e) { DropDownList1.Items.Add("Eskişehir"); } |
AutoPostBack ile Form Verilerinin Hemen Yollanması
Bazı kontrollerin AutoPostBack özelliği sayesinde kullanıcının kontrolden ayrılması anında, veriler sunucuya postalanır. Yani postalanma işleminin yapılması için buton’a tıklama yada farklı bir olayın tetiklenmesi beklenmez. Bu özelliğin kullanılabilmesi için sayfa tasarımı sırasında, verinin hemen postalanması istenen kontrolün AutoPostBack özelliğinin aktif hale getirilmesi yeterlidir.
AutoPostBack özelliğinin kullanımıyla ilgili olarak, seçtiğimiz ile göre ilçelerin değiştiği bir örnek uygulama yapalım.
Tabiki bir il seçtiğimizde formun otomatik olarak postalanması gerektiğinden illerin bulunduğu DropDownList’in AutoPostBack özelliğini “True” yapıyoruz.
Sonrasında kodlarımızı aşağıdaki gibi oluşturalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { DropDownList1.Items.Add("Lütfen Seçiniz..."); DropDownList1.Items.Add("İstanbul"); DropDownList1.Items.Add("Ankara"); DropDownList1.Items.Add("İzmir"); DropDownList1.Items.Add("Bursa"); DropDownList2.Items.Add("Lütfen Seçiniz..."); } } protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { if (DropDownList1.SelectedIndex == 1) { DropDownList2.Items.Clear(); DropDownList2.Items.Add("Bağcılar"); DropDownList2.Items.Add("Bakırköy"); DropDownList2.Items.Add("Şişli"); DropDownList2.Items.Add("Kadıköy"); DropDownList2.Items.Add("Pendik"); } else if (DropDownList1.SelectedIndex == 2) { DropDownList2.Items.Clear(); DropDownList2.Items.Add("Çankaya"); DropDownList2.Items.Add("Gölbaşı"); DropDownList2.Items.Add("YeniMahalle"); DropDownList2.Items.Add("Mamak"); } } |
Evet listeden Ankara veya İstanbul’u seçtiğinizde o il içerisindeki ilçeler otomatik olarak listeleniyor. Konunun anlaşılması adına böyle bir örnek seçtim. Tüm il ve ilçelerin listelenmesi için bu yöntemi kullanmayınız.
Bu yazımda postback işlemi ile ispostback ve autopostback özelliklerine değinmeye çalıştım. Konuyla ilgili sorularınızı bana iletebilirsiniz. Kolay gelsin…
Güzel bir anlatım olmuş elinize sağlık
Çok güzel bi açıklama sağolun. Allah razı olsun
bir sorunum var. bir tasarımım var ve içinde tab menü var. 3. tabdayken postback olması gerekiyor. post olduktan sonra 1. taba geçiyor doğal olarak. normalde domain.com/sayfa#tab3 diye yönlendirirken response.redirectpermanent(“sayfa#tab3”); komudu yemiyor. Bir fikriniz varmı?
çözümü farklı şekilde yaptım. Hazır css kütüphanesi yerine panel ve buton kullanarak yaptım. Şimdilik efek eklemedim. İlerleyen zamanda o konuya da bakacağım.
Çok-çok teşekkürler. mükemmel bir anlatım 🙂
Geç oldu ama başka arkadaşlar faydalansın.
AjaxToolkit TabPanel kullanmayı deneyebilirsin.