Javascript : __doPostBack fonksiyonu (ASP.NET Postback mekanizması)

__doPostBack fonksiyonu nedir ve ne yapar ? ASP.NET web server kontrolleri Button ve ImageButton dışında postback tetiklemesi için __dosPostBack  fonksiyonunu kullanır. Bu aslında klasik asp.net postback mekanizmasıdır.

Bu fonksiyonu daha iyi anlamak için sıra sıra gidelim.  İki adet web server kontrolü ekleyelim (Button ve ImageButton dışında) ve arka tarafta ne olup bittiğine göz atalım.

///ASPX
<asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click" Text="LinkButton" />

///Code behind
protected void LinkButton1_Click(object sender, EventArgs e) { }

Sayfayı çalıştırıp sayfa kaynağına baktığımızda aşağıdaki kodları göreceğiz :

///JavaScript
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}

///HTML
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />

<a id="LinkButton1" href="javascript:__doPostBack('LinkButton1','')">LinkButton</a>

Görüldüğü gibi __dopostback fonksiyon iki argüman alıyor. eventTarget ve eventArgument. Bununla beraber iki adette hidden field eklenmiş. ‘eventTarget’ ve’ eventArgument’  değerlerini saklamak için kullanılan  “__EVENTTARGET” ve “__EVENTARGUMENT,” sırasıyla deklare edilir. LinkButton’a tıklandığında __dopostback javascript fonksiyonu argümanları sırayla çağırır ve gönderir. Bu durumda eventTarget LinkButton1 ve eventArgument boştur. Bu değerler hidden field kontrollerinde saklanır. Form gönderildiği veya tetiklendiğinde parametre koleksiyonu forma eklenir. Server tarafında ASP.NET hangi kontrolün postback olayına neden olduğunu anlar ve form koleksiyonundan gelen değerleri alır ve kullanır. Daha iyi anlamak için biraz daha kolay açıklayalım. Farklı bir kontol ekliyoruz ve LinkButton2 adıyla isimlendiriyoruz. 1 Break point koyarak F5 yapıyoruz. LinkButton1 tıklandığında Page_Load eventinde gelen değerleri kontrol edelim: 2 (1)   Görüldüğü üzere __EVENTTARGET anahtarı postback olayına sebep olan kontrolün değeri döndürüyor (LinkButton1). Daha sonra LinkButton2 tıkladığımızda gelen değerin “LinkButton2” olduğunu göreceğiz. Javascript __doPostBack fonksiyonu ASP.NET ile böylece çalışmaktadır. Button and ImageButton ASP.NET içerisinde sadece bu iki kontrol postback olayına sebep olur. Yukarıda açıklandığı gibi ASP.NET postback mekanizması javascript __dopostback fonksiyonunu kullanarak formu post eder. Diğer bir deyişle bu iki kontrol client browser gönderimini kullanır  ve bundan dolayı __doPostBack fonksiyonunu kullanmazlar. Bununla beraber, ASP.NET postback mekanizmasını kullanmak için Button kullanımı yapabilirsiniz. UseSubmitBehavior özelliği ile (bu özellik artık ImageButton kontolünde yok) …UseSubmitBehavior özelliği bool tipinde olup ASP.NET postback mekanizması mı (eğer öyleyse value= false olacaktır) yoksa client browser gönderimimi olduğuna karar verir (value = true). Sayfa da bir button kontol yapalım :


<asp:Button ID="Button1" runat="server" Text="browser gönderimini kullanır" UseSubmitBehavior="true" />

<asp:Button ID="Button2" runat="server" Text="asp.net postback mekanizmasını kullanır" UseSubmitBehavior="false" />

 

Dikkat edin başlangıçta UseSubmitBehavior="true" ifadesi yok veya defaul olarak gelmiyor. Daha iyi anlaşılması için ben ekledim. Şimdi sayfayı çalıştırıp, sayfa kaynağını kontrol edelim. Sonuç aşağıdaki gibi olacaktır.


<input type="submit" name="Button1" value="browser gönderimini kullanır" id="Button1" />
<input type="button" name="Button2" value="asp.net postback mekanizmasını kullanır" onclick="javascript:__doPostBack('Button2','')" id="Button2" />

 

Button2 de UseSubmitBehavio özelliğini false olarak işaretlediğimiz için formu göndermek için __doPostBack fonksiyonunu kullanacaktır.

Kolay Gelsin

Muavenet

Web teknolojilerine merak salmış bir bilgisayar mühendisinin yazıları

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir