analiz et, tasarla, hayata geçir



JavaScript ile Code-Behind Üzerinden Metod Çağrısı

ASP.NET AJAX ile gelen güzel özelliklerden biri de ScriptManager ile kod tarafından method çağırmaktır. Genel olarak web servis üzerinden yapılabilen bu çağrılar benzer bir şekilde aspx kodlarımız üzerinden de yapılabilmektedir. Bu işlemin temel amacı aslında tek bir web serviste toplanan metodların ilgili sayfalara dağıtılabilmesidir.

ASP.NET AJAX kütüphanesinde PageMethods olarak isimlendirilen bu yöntemin nasıl uygulandığını beraber görelim;

ScriptManager

PageMethods özelliğinin desteklenmesi için sayfada bir adet ScriptManager kontrolünün bulundurulması gereklidir. Daha sonrasında bu kontrolün PageMethods özelliğine “true” atanarak HTML çıktısına PageMethods scriptlerinin yerleştirilmesi sağlanır.


Method Tanımı

Sayfada çağıracağımız metod ise aşağıdaki özelliklerde olmalıdır;

1 – Metod public olmalıdır

2 – Metod static olmalıdır

3 – System.Web.Services.WebMethod özelliğini (attribute) barındırmalıdır

[System.Web.Services.WebMethod]
public static string GetUserNameByEmail(string email)
{
    return Membership.GetUserNameByEmail(email);
}

Daha sonrasında PageMethods javascript sınıfını kullanarak metodumuzu çağırabiliriz;


İstenildiği taktirde ScriptMethod özelliği ile de metodumuzun nasıl response döneceği ile ilgili bazı ayarlar yapılabilir.

[System.Web.Script.Services.ScriptMethod(ResponseFormat=System.Web.Script.Services.ResponseFormat.Json)]
[System.Web.Services.WebMethod]
public static string GetUserNameByEmail(string email)
{
    return Membership.GetUserNameByEmail(email);
}

Arka tarafta çağırdığımız metodun static olması aslında bazı sonuçlar çıkarmaktadır. İlk başta bize Page sınıfının örneklenmeyeceğini belirterek sayfa üzerindeki herhangi bir state veya kontrole ulaşamayacağımız anlamına gelir. Fakat life cycle gibi bir çok aşama atlandığından metod performansı çok yüksektir.
Dolayısıyla sayfa üzerindeki herhangi bir değerden (ViewState, Kontrolller vs.) faydalanmak istediğimizde UpdatePanel, global değerlerden (Session, Cache) faydalanmak için ise PageMethods özelliğini kullanabiliriz.



10 Yorum


  1. güvercin

    peki işlem yaptığında “yükleniyor” tarzında bir yazıyı nasıl çıkartabiliriz

    Haz 27, 2009 @ 06:16


  2. Serkan Yazıcıoğlu

    PageMethods u çağırmadan önce javascript ile istediğiniz bir yerde yazı yazdırabilirsiniz. Daha sonrasında ajax request döndüğünde yazıyı kaldırabilirsiniz.

    function GetUser(email)
    {
    document.getElementById(‘label’).value = “yükleniyor…”;
    PageMethods.GetUserNameByEmail(email, PageMethodSucceded, PageMethodFailed);
    }

    function PageMethodSucceded(response)
    {
    document.getElementById(‘label’).value = “”;
    alert(response);
    }

    Haz 27, 2009 @ 06:58


  3. güvercin

    hımm yani yazırda bir methot yok o konuda programalama mantığını kullanarak çözmek gerekiyo :)
    Teşekkürler serkan bey

    Haz 28, 2009 @ 02:49


  4. Serkan Yazıcıoğlu

    Rica ederim. Dediğiniz gibi öyle derin bir lifecycle burada yok. Aslında ajax requestlerin lifecycle ı var ama arkada işi PageMethods sınıfı yaptığından araya giremiyoruz. Dolayısıyla bazen basit düşünmek en mantıklısı :)

    Haz 28, 2009 @ 04:30


  5. Cem

    Peki “GetUserNameByEmail” fonksyonunu bir class içine atıp çalıştırmak istediğimizde hata veriyo. Class1.GetUserNameByEmail şeklinde olmuyo. Bunu nasıl hallederiz ?

    Tem 06, 2009 @ 03:35


  6. Serkan Yazıcıoğlu

    Bu metod zaten page sınıfı içerisinde olmalı, başka bir sınıf derken tam olarak neyi kastediyorsunuz acaba?

    Tem 07, 2009 @ 06:34


  7. güvercin

    kodları çalıştırırken sayfanın code behind kısmındaydım ve sorunsuz çalıştı. Ancak projeye bir class.cs isiminde dosya attıp fonksyonuda oraya koyduğumda jquery fonksyonu görmedi ve hata verdi.

    Tem 09, 2009 @ 06:13


  8. Serkan Yazıcıoğlu

    Eğer farklı bir kütüphaneden veya sınıftan metod çağırmak istiyorsanız o zaman Page sınıfındaki metodunuz üzerinden çağırmanız gerekmektedir. Bu metodun farklı bir sınıfta olması durumunda ASP.NET metodu göremez ve ön yüze metodun javascript lerini enjekte edemez.

    Tem 09, 2009 @ 17:16


  9. EMRE SAĞLAM

    code-behind sayfası dediğiniz tam olarak ne oluyor? yani yeni bi sayfa oluşturmak mı ? yada var olan sayfa mı ?

    Tem 30, 2009 @ 06:21


  10. Serkan Yazıcıoğlu

    ASP.NET platformunda programlama mantığı ikiye ayrılmıştır.

    Asp, php gibi platformlardaki html içerisinde kod yazma mantığına inline-coding denir.

    ASP.NET ile birlikte ise her bir html sayfası için ayrı bir kod dosyası bulunmaktadır. Burada html’den kastettiğimiz kısım aspx, kod tarafı olarak kastettiğimiz kısım ise aspx.cs ya da bir diğer adıyla “code-behind” dosyasıdır.

    Tem 30, 2009 @ 06:30

Yanıtla



SON YAZILARIM

c#
‘Configuration system failed to initialize’ Hatası

Bugün karşılaştığım 'Configuration system failed to initialize' hatası basit ama bir o kadar da rahatsız...

asp.net
ASP.NET Timeout Süreleri

Web uygulamalarında bazı durumlarda sunucuya yapılan request süreleri çok fazla olabilir veya kullanıcıların...

ajax
UserControl, UpdatePanel ve RegisterPostBack Sorunu

ASP.NET AJAX ile gelen sorunlardan biri de UpdatePanel içerisinde bazı durumlarda ajax postback yerine full...