PageMethods, sunucu tarafındaki metotlara javascript kodu ile istemci tarafında erişilip çalışıtırılmasını sağlayan bir özelliktir. Metot çalıştırıldığı sırada PostBackişlemi gerçekleşmez. Javascript tarafında PageMethod çağrıldığında, metot başarılı olduğunda bir fonksiyon; hata verdiğinde başka bir fonksiyon çalışmaktadır. Bu fonksiyonlarda WebMethod tarafından dönen değer işlenebilir.
Uygulama
Uygulamada, "ad" ve "soyad" kaydedecek, 2 adet textbox (metin alanı) ve 1 adet button (düğme) içeren basit bir kişi ekleme formu oluşturulur. PageMethod özelliğinin kullanılabilmesi için formun içine bir adet ScriptManager eklenir. Varsayılan olarak "EnablePageMethods" özelliği "false" olarak gelmektedir, bu özellik“true” olarak değiştirilir.
<asp:scriptmanager ID="Scriptmanager1" runat="server" EnablePageMethods="true">
</asp:scriptmanager>
Uygulamada ekleme işlemi yapılacağı için bir veritabanı kullanılmaktadır. “Kisi” adında bir tablo oluşturulur, “ad” ve “soyad” kolonları bulunmaktadır. Bu tablo Entity Framework özelliği ile uygulamaya eklenir. Daha sonra ekleme işlemini yapacak static "KisiEkle" metodu kod tarafında oluşturulur. Bu metodun WebMethodolabilmesi için üstüne [Web Method] özelliği eklenir. Metodun static ve WebMetod olması istemci tarafından erişilmesini sağlamaktadır.
[WebMethod]
public static string KisiEkle(string ad, string soyad)
{
denemeEntities ke = new denemeEntities();
Kisi k = new Kisi(ad, soyad);
ke.AddToKisi(k);
ke.SaveChanges();
return k.adSoyad;
}
Formda butona tıklandığında sayfanın sunucuya gidip istemciye dönmesini önlemek için javascript fonksiyonları kullanılmaktadır. <script> etiketleri içerisindejavascript kodları eklenmiştir.
<script type="text/javascript">
function kisiEkle() {
var ad = $get("tbAd");
var soyad = $get("tbSoyad");
PageMethods.KisiEkle(ad, soyad, onComplete, onFailed);
}
function onComplete(args) {
alert(args + " kaydoldu.");
}
function onFailed(error) {
alert('Yapilan islem sirasinda asagıdaki hata(lar) oluştu.\n\r' + error.get_message());
}
</script>
Yukarıda görüldüğü üzere üç adet javascript fonksiyonu tanımlanmıştır. KisiEkle fonksiyonu formdaki "button" kontrolünün ”OnClientClick” özelliği ile çalışmaktadır. Uygulamada butona tıklanıldığında PostBack işlemini önlemek için butonda “OnClientClick” özelliğine “return false;” eklenir.
<asp:Button ID="btKaydet" runat="server" Text="Kaydet" OnClientClick="kisiEkle(); return false;" />
$get metodu ile alınan değerler “ad” ve “soyad” değişkenlerine atanır. “PageMethods.KisiEkle(ad.value, soyad.value, onComplete, onFailed)” ise kod tarafında yazılan KisiEkle web metoduna, parametre olarak “ad” ve “soyad” değerlerini gönderir. PageMethod çalıştıktan sonra işlem başarılı olduysa onComplete; olmadıysa onFailed fonksiyonu çalışır. Bu fonksiyonlarda metottan gelen değer uyarı ekranı ile kullanıcıya gösterilmektedir.