Asp.Net yeni baslangiç yapiyorsaniz . PostBack kavramini mutlaka ögrenmelisiniz. Zira bu kavram Asp.Net çalisma mantigini anlamada büyük derecede yardimci olacaktir . Peki PostBack nedir Client(Istemci) bilgisayarda yapilan bir istek ile sunucuda bu istegin yerine getirilmesi istemci bilgisayara yansitilmasi PostBack'dir. Daha açik sekilde . Web sayfamizda bir form doldurdugumuzu düsünelim .Formdaki verilerin sunucuya gidip veritabanina eklenmesi gerekir. Bu sekilde sunucuya bir gidis ve daha sonra client'e yansimasi var ise sayfa postback olmus demektir.
Peki Bu Kavrami bilmek nerelerde isimize yaracaktir ?
Hemen bir örnek üzerinden gidleim
Yeni bir aspx sayfasi olusturalim .
Sayfamiza DropDownList atalaim . DropDownList 'e elemanlarini sayfanin source kisminda add item diyerek eklemeyelim . Code tarafindan ekleyelim .
Birde buton atalim sayfamiza . Fakat buton_click eventini olusturmayalim simdilik .Sayfamizi çalistiralim .
Görüntümüz bir üstteki gibi oalcaktir.
Butonu her tikladigimda ayni 5 item tekrar yükleniyor . Ne oluyor sayfa butona tiklayarak postback ediyorum her post back edisimde sayfanin page_load kismindan baslayarak yeniden çalistiriliyor.
Dönüyorum projeye button'a çift tiklayip buton_click event'ini ekliyorum .
Sayfaya bir Breakpoint atip Asp.Net sayfayi çalistirma mantigini izleyelim
Tekrar projeyi çalistiriyorum .Butona her bastigimda sayfa postback oluyor mantigimiza göre üst kisim isletilmeyecek direk button_click event'i isletilecek derdik ama asp.net böyle degildir. Buton_click event 'i olsa bile sayfa postback edilince ne olursa olsun page_load kismi basindan itibaren kodlari isletilir. Iste burasi çok önemlidir. (Tabi burada asp.net su bilgisi de önemli asp.net kontrolleri sunucuya gidis gelislerde üzerlerindeki degeri koruduklari önemli bir bilgidir.)
Çözüm yöntemleri
1. Asp.net kontrolleri sunucuya gidis gelislerde üzerlerindeki degeri koruyor dedik .Bunu istedigimiz kontrolün properties'ine gelip ,
Bir üst sekilde gibi yani ,
EnableViewState true'dir varsayilan olarak . False yaparsak sunucuya gidis gelislerde üzerlerindeki degeri korumaz yine herseferinde page_load çalisir eklenir ama sunucuya giderken üzerindeki degeri kaybedeceginden hep 5 kayit olacaktir . DropDownList ' te.
(Bazi kontrollerde geçerli degil bu özellik . Örn textboxda false yapsanda sunucuya gidis gelislerde degerini korur.)
SIMDI BIZIM YAPMAK ISTEDIGIMIZ VE KONUMUZUN AÇILIS AMACI OLAN POSTBACK KAVRAMI ILE ÇÖZELIM BU SORUNU VE AYNI ZAMANDA POSTBACK KAVRAMINIDA ANLAMIS OLACAGIZ BU ÖRNEK IL
2.Yöntem PostBack Kavrami ile Çözüm
Söyle bir kod yazdiracagiz sayfa ilk kez yüklendiginde page_load daki kodlari çalistir yüklensin dropdownlist ' e , Sayfa geldikten sonra sunucuya istek gönderirsem dolmasin . Asp.net te bu istekleri anlayan bir özellik var.
Bu özelligin adi IsPostBack ' dir. Geriye boolean döndürmektedir. Sayfanin ilk yüklenmesi postback degildir. Sayfa geldikten sonraki sunucuda istedigin her istek postback'dir.
this.IsPostBack veya Page.IsPostBack yada yalnizca IsPostBack diye 3 farkli sekildede yazabiliriz. Ayni islevdedir 3 üde.
Brir üstte resimde kod olarak belirttik
Kodun açiklmasi , Post edilmemisse içindekileri çalistirir. Ondan sonra butona tikladik bir istek yolladik artik postback true'dur . True oldugundan o kod blogu çalismayacaktir.
Tarayicida Refresh yaparsak Sayfayi ilk kez açmis gibi olmaz. Tarayicilar Refresh yaparken su mantikla çalisir Refresh yapmadan bir önce sayfadnin post back 'i neyse odur .
Örnegin postback true ide refresh yaptik yine truedir. Çünkü refresh yapmadan bir önceki postback true idi.
ÇOK ÖNEMLI LINK FARKI
AYNI SAYFADA BUTONUN ARDINDAN BIRDE
<a href="default.aspx"></a> tiklanilinca yine kendi sayfasina getiren bir link yaptik . Bu linke her tiklanildiginda siteye ilk kez istek yapmis gibi olur postback tiklanmadan önce true diyelim tikladiktan sonra false dur..
<a> tagi demek yeni bir istek demektir.
COMMENTS