mehmetduran.com - Paylaşmak Güzeldir...
Jquery ve Asp.net MVC ile Ajax İşlemleri
Bu yazımda MVC teknolojisinde Jquery ile Ajax işlemlerini nasıl yapabileceğimizi göstermeye çalışacağım. Son dönemde MVC ile bloğumu yazıyorum ve hem kullanıcı tarafından hem de yönetim tarafında Ajax işlemlerini çok sık kullanıyorum.Ayrıca bu yazım ile beraber MVC ile ilgili yazırlarıma da kaldığım yerden devam ediyorum. Daha önce MVC ile ilgili giriş olarak burada ve Url işlemleri hakkında burada yazı hazırlamıştım. Şimdi de Asp.net MVC ve Jquery ile Ajax işlemlerini nasıl yapacağımıza göz atacağız.

Daha önce Asp.net ile gerçekleştirdiğimiz Ajax işlemlerinde çoğunlukla Webmethod üzerinden işlemlerimizi yapıyorduk. Ancak MVC'de yapı farklı olduğundan Ajax işlemleri için Controller bölümünü kullanacağız. Yani View (sayfa)'ları kontrol ettiğimiz ve tanımladığımız Controller bölümünde Ajax işlemleri için metot tanımlamaları yapacağız ve bu metotlar üzerinden Ajax işlemlerini gerçekleştireceğiz. Şimdi bu işlemleri nasıl yapacağımıza bakalım.

İlk olarak string, int, void tipinde tanımladığımız bir metot ile Ajax işlemini ele alalım. Burada Ajax işlemini gerçekleştireceğimiz View'ı tanımladığımız Controller içinde metodumuzu tanımlayacağız ve Jquery ile bu metoda istekte bulunacağız. Bu işlem için Jquery ve Controller kodlarımız şu şekilde olabilir.

/* Jquery Kodlarımız */
$.ajax({
    type: "post",
    url: "<%= Url.Action("Oku", "Home") %>",
    data: "{}",
    dataType: "html",
    success: function(msg) {
        alert(msg);
    },
    error: function(msg) {
        alert(msg);
    }
});
 
/* Controller Kodlarımız */
public class HomeController : Controller
{
  public string Oku()
  {
    return "Ajax işlemi başarılı.";
  }
}

Burada yazdığım metot string ancak bu metot int, void veya herhangi bir türde olabilir. Dikkat etmemiz gereken nokta Jquery kodlarında yazdığımız dataType özelliğinin bu işlemde html olması. MVC için bu şekilde tanımladığımız metotlarda Ajax işlemleri için dataType html olmakta.

İlk verdiğim örnekte metot türünden dolayı dataType html idi. Bu metodu JsonResult veya ActionResult gibi sınıflar türünden tanımladığımızda ise Jquery kodlarında tanımladığımız dataType özelliği ise json olmalı. Datatype'ın önemi ise Ajax işleminin sonucunda metotların verdiği sonuç bu özelliğe göre okunmakta. Eğer bu özelliği doğru belirlemezsek işlem sonucuna doğru bir biçimde erişemeyebiliriz. Bu yöntemi kullanarak aşağıdaki gibi Jquery ve Controller kodlarımızı yazabiliriz.

/* Jquery Kodlarımız */
$.ajax({
    type: "post",
    url: "<%= Url.Action("Oku", "Home") %>",
    data: "{}",
    dataType: "json",
    success: function(msg) {
        alert(msg);
    },
    error: function(msg) {
        alert(msg);
    }
});
 
/* Controller Kodlarımız */
public class HomeController : Controller
{
  public JsonResult Oku()
  {
    return Json("Ajax işlemi başarılı.");
  }
}

İlk iki örnekte Ajax işleminde string bir veri dönderdik. Ancak bu farklı olabilir. Metot tipini void, integer, vb. türler yapabiliriz. Son örnek olarak ise kendi yazdığım sınıfı json olarak dönderen ActionResult metodu ve Jquery kodlarını paylaşacağım.

/* Jquery Kodlarımız */
$.ajax({
    type: "post",
    url: "<%= Url.Action("Oku", "Home") %>",
    data: "{}",
    dataType: "json",
    success: function(msg) {
        var sonuc = "";
        $.each(msg, function(){
            sonuc += this.id + " - " + this.text + "\n";
        });
        alert(sonuc);
    },
    error: function(msg) {
        alert(msg);
    }
});
 
/* Controller Kodlarımız */
public class HomeController : Controller
{
  public ActionResult Oku()
  {
    List<deneme> sonuc = new List<deneme>();
    sonuc.Add(new deneme(){ id = 1000, text = "Deneme 1" });
    sonuc.Add(new deneme(){ id = 1001, text = "Deneme 2" });
    sonuc.Add(new deneme(){ id = 1002, text = "Deneme 3" });
    sonuc.Add(new deneme() { id = 1003, text = "Deneme 4" });
    return Json(sonuc);
  }
}
 
/* deneme sınıfı */
public class deneme
{
  public int id { get; set; }
  public string text { get; set; }
}

Bu şekilde Asp.net MVC ile geliştirdiğimiz uygulamalarda Jquery ile Ajax işlemlerini gerçekleştirebiliriz. Verdiğim bu yöntemleri uyarlayarak ihtiyaç duyduğumuz tüm işlemleri gerçekleştirebileceğimizi düşünüyorum. Ancak yine de keşfettiğim yenilikler olursa paylaşmaya devam edeceğim.

Verdiğim örneklerde yazmış olduğumuz metotlar parametreye sahip ise bu parametre değerlerini jquery kodlarımızda data özelliği ile metotlara iletiyoruz. Bu konuda ayrıntılı bir yazımı kısa süre içinde sizlerle paylaşacağım.

İyi Çalışmalar.
Bookmark and Share
Bu Yazıyı Değerlendirin.
Konuyla İlgili Olabilecek Diğer Yazılar Jquery ile Aç-Kapa Alan Yapımı Microsoft Yaz Okulu 2009 Ankara Ayağı Sona Erdi mehmetduran.com 4 Yaşında Arşiv Bölümü Bitti Civilization of Ottoman ve Blogsa Ekipleri Gazi MMF'de
Yorumlar
Yorum Yaz
RSS Yorum Takibi
Ersin 11 Temmuz Cumartesi 2009 11:49 #1
Merhaba, $.ajax({ type: `GET', url: 'sales_gallery.aspx', data: 'iID='+$('#<%=TextBox1.ClientID %>').val(), Bu kodlarla TextBox'taki bilgiyi alabiliyorum ama ben onun yerine asp.net kodlarındaki bir değişkenin değerini almak istiyorum. Nasıl olacak? Teşekkürler.
Mehmet Duran 11 Temmuz Cumartesi 2009 11:54 #2
Bunun için değişkenin erişilmesi yani public olması gerekir. Bu değeri almak için ise aynı kullanımı yapmanız yeterli.
<%= degisken_adi %>
Serdar 11 Ağustos Salı 2009 12:53 #3
Merhaba hocam, Aslında bu sorumun yeri burası mı pek bilemiyorum fakat bir okul projem için birşeye ihtiyacım var. Kendim veritabanından girdiğim değerlerin aylık istatistiklerini http://img222.imageshack.us/img222/5811/istatistiktablo.jpg şu resimdeki gibi çizdirmek istiyorum. Ajax ve GDI kullanmam gerektiğini düşünmekteyim ama pek fikir yürütemedim açıkçası. Yardımcı olursanız sevinirim. İyi çalışmalar...
Mehmet Duran 12 Ağustos Çarşamba 2009 00:46 #4
Böyle birşeyi kendin yapacaksan çok fazla zamanını alır diye düşünüyorum. Bunun yerine flash ile hazırlanmış ve tam istediğin işleri yapabilecek bir kontrol var. Şimdilik onu kullanabilirsin. Buradaki siteden gerekli bilgilere ve dosyalara ulaşabilirsin.
mesut çakır 26 Ekim Pazartesi 2009 18:00 #5
Merhaba hocam, ben burdaki eylemleri yaptım fakat çok yeni olduğum için bir yerde kavram eksikliğinden olsa gerek tıkandım. public bool AddUser(string name, string surname){ try{User user = new User(); user.name = name; user.surName = surname; user.CreateDate = DateTime.Now; userRes.Add(user); return true; } catch (Exception){return false;}
Mehmet Duran 26 Ekim Pazartesi 2009 19:16 #6
Merhaba. Öncelikle kod ile yapmak istediğini anladım. Ancak bu kodu Ajax ile kullanman için script kodlama (eğer MVC kullanıyorsan buradaki gibi) da yapmalısın. Ancak MVC değilse yazmış olduğun metodu ve script kodlarını düzenlemelisin. Sitemde hem MVC için hem de Asp.net ile Ajax örnekleri mevcut.
huseyin 07 Ocak Perşembe 2010 13:13 #7
Merhaba.Buradaki son örnekte actionresult tipindeki methodda json tipinde bir değer geri döndürdünüz. Aynı şekilde jsonresult tipindeki bir method için de json tipinde geri değer döndürdünüz. Actionresult ile jsonresult arasındaki fark nedir ve hangisini kullanmalıyız?Actionresult view için kullanılıor tamam ama ajax işlemleri için sorum geçerli??
huseyin 07 Ocak Perşembe 2010 13:19 #8
2.sorum ise ASP.net mvc nin normal asp.net e olan artılarını hala tam kavrayamadım.(Url dışında..) Genel olarak acaba asp.net mvc nin avantajlarını sıralayabilir misiniz?ayrıca hangisini ne amaçla tercih etmeliyiz? MVC yazılıranıza devam edecek misiniz? Son olarak da bastan itibaren sharepoint hakkında da makaleler yazarsanız çok mutlu oluruz.:))Cunku şu sıralar çok revaçta..Tesekkurler..
Mehmet Duran 07 Ocak Perşembe 2010 21:49 #9
Merhaba. ActionResult ile Controller bölümünde tanımlanan tüm Action'ların sonucu elde edilir. ActionResult sınıfı MVC kütüphanesi ile gelir. Diğer result türleri bu sınıfı inherit eder. Yani Actionresult ana sonuc sınıfı diğerleri ise bu sınıftan türeyen yardımcı sınıflar olarak tanımlayabiliriz. Sitemde tam olarak bu konuda yazım mevcuttur.
Mehmet Duran 07 Ocak Perşembe 2010 21:56 #10
İkinci olarak da MVC, Asp.net içinde geliştirilmiş klasik Webforms uygulamalarına alternatif bir web platformu. Asp.net ile bir webforms bir de MVC seçeneği mevcut. Geliştiriciler istediklerini tercih edebilirler ama Asp.net MVC yeni diyebileceğimiz ve gün geçtikçe popülerliğini artıran ve çok kullanılan bir platform. Webforms'lara göre çalışma düzeninde farklılıklar var. Url olayı sadece MVC için geçerli değil. .Net 4.0 ile tüm web uygulamalarında kullanılabilen bir yapı. Ben kendimi MVC konusunda geliştirmeyi düşünüyorum. Bu da yazılarımın olacağını gösterir. Ancak webform uygulamaları da geliştireceğimdir. İkisi de duruma ve projeye göre tercih edilebilir.
Miraç Baran Satıç 20 Mart Cumartesi 2010 21:16 #11
Mvc'deki JsonResult olayı ile alakalı bir şeylerde olsaydı keşke.Hep klasik jquery + code behind olayları sıkıyor.Yeni yöntemlere adepte olmak lazım..
Mehmet Duran 21 Mart Pazar 2010 00:44 #12
Yazım MVC ile Ajax işlemlerini ne şekilde yapabileceğimizi gösteren bir yazı. JsonResult, ActionResult sınıfını miras alan ve parametre ile aldığı değeri, nesneyi json formatına çeviren ve sonuç olarak dönderen bir sınıftır. MVC, Ajax işlemleri ile ilgili birçok kolaylık sağlamakta. JsonResult bunlardan biri ve bana göre çok özel uygulamalarda json kullanmalı. Eğer kullanıcı tarafında, server tarafında tanımlanan nesneler alınıp, bunlar üzerinde işlem yapılacaksa json formatı kullanılmalı. Eğer klasik olarak server tarafında işlem yapıp, veri elde ediliyorsa (veritabanı işlemleri, form işlemleri, vb) bu işlemler json değil de direk string (html, xml, vb.) formatta yapılmalı. Böylece gereksiz çevirmelerden kurutulup, bir miktar performans artışı sağlayabiliriz. Ayrıca klasik ajax ve codebehind sadece öğrenme için. Öğrendikten sonra çok güzel işler yapılabiliyor. Şu anda kendi kontrollerimi kullanmaktayım ve tüm bunları Ajax ile kullanabiliyorum. Ayrıca her projeye de rahatlıkla entegre edebiliyorum. Eğer yeterince geliştirebilirsem yayınlamayı da düşünüyorum.
Miraç Satıç 15 Haziran Salı 2010 18:51 #13
Mehmet bey; Bende asp.net/mvc ile çalışıyorum.Son zamanlarda Django ilede ilgileniyorum ve bu Json olayına fena halde takmış bulunmaktayım :) Bence Json işlemlerinde JsonResult çok faydalı oluyor.En büyük artısı Url'den direk gelen Get isteklerine cevap vermemesi böylece gözümde daha güvenli(Json to Json), isterseniz biraz daha açabilirim ama siz anladınız bence:)
Mehmet Duran 15 Haziran Salı 2010 19:21 #14
Söylediklerinde haklısın. Cevap vermeme durumu action'ın JsonResult türünde olmasından değil de içermesi gereken parametrelerin eksikliğinden olsa gerek. Ayrıca büyük verilerle uğraşılıyorsa JsonResult türü performans bakımından sorun yaratabilir. Bunun yerine ContentResult kullanmak daha mantıklı. Tam bu konuda şu sıralar bir yazı hazırlamayı düşünüyordum. En kısa sürede yayınlamaya çalışacağım.
Miraç Satıç 18 Haziran Cuma 2010 19:19 #15
Yazılarınızı elimden geldiği kadar takip etmeye çalışıyorum. JsonResult konusu aslında bir lüks sayılabilir :) Bence ContentResult sınıfını gerektirecek büyüklükte ajax istekleri yapmak pekde mantıklı değil zaten. Ama dediğim gibi ActionResult'a yapılan Get isteklerinden cevap elde edilmesi bazı yerlerde sorunlar oluşturabiliyor. Yazınızıda bekliyoruz...
Mehmet Duran 19 Haziran Cumartesi 2010 00:52 #16
ContentResult ile her türlü Ajax işlemleri yapılır. Burada önemli durum dönen içeriğin Json değil de Xml türünde (yani düz metin) olmasıdır. Bu da Ajax ile geliştirilen sistemlerde önemli performans sağlar. Ayrıca tanımladığın tüm Action'lara HttpPost, HttpGet, vb. gibi attributes'ler ekleyerek hangi durumlarda çalışacağını belirtebiliyorsun.
İsim :
Site :
Yorum :

Buradan bu yazıya ait yorumları RSS olarak takip edebilirsiniz.

Bu servis ile yazılara eklenen yorumları RSS ile takip ederek konu ile ilgili başkaları tarafından yapılan yorumları veya konuyla ilgili sorduğunuz sorulara verilen cevapları görebilirsiniz.
Hizmet amaçlı işler başarıya, kar amaçlı olanlar ise başarısızlığa yöneliktir.
Bölümler
Yazılar
Arşiv
Arama
Linkler
Site İçi Arama
Son Zamanlarda Ne Yapıyorum ?
İstatistikler - Araçlar - Reklam
İstatistikler
Sayaç
Mehmet Duran | mehmetduran.com | Copyright © 2009