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.
  1. <asp:scriptmanager runat="server" enablepagemethods="true"></asp:scriptmanager>  
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
  1. [System.Web.Services.WebMethod]  
  2. public static string GetUserNameByEmail(string email)  
  3. {  
  4.     return Membership.GetUserNameByEmail(email);  
  5. }  
Daha sonrasında PageMethods javascript sınıfını kullanarak metodumuzu çağırabiliriz;
  1. <script type="text/javascript">  
  2. function GetUser(email)  
  3. {  
  4.     PageMethods.GetUserNameByEmail(email, PageMethodSucceded, PageMethodFailed);  
  5. }  
  6.           
  7. function PageMethodSucceded(response)  
  8. {  
  9.     alert(response);  
  10. }  
  11.           
  12. function PageMethodFailed()  
  13. {  
  14.      alert("İşlem sırasında hata oluştu");  
  15. }  
  16. </script>  
İstenildiği taktirde ScriptMethod özelliği ile de metodumuzun nasıl response döneceği ile ilgili bazı ayarlar yapılabilir.
  1. [System.Web.Script.Services.ScriptMethod(ResponseFormat=System.Web.Script.Services.ResponseFormat.Json)]  
  2. [System.Web.Services.WebMethod]  
  3. public static string GetUserNameByEmail(string email)  
  4. {  
  5.     return Membership.GetUserNameByEmail(email);  
  6. }  
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.

Yorumlar

Bu blogdaki popüler yayınlar

Asp.Net ile Mernisten veri Çekme