2012-02-11 20 views
6

Arka plan ile iletişim kurmak için JQuery kullanan bir web sayfam var. Bazı POST eylemlerim var. Ancak, şimdi bir GET eylemim var ve ona geçirilen parametre değerlerinin boş olduğunu fark ettim. POST işlemlerim gayet iyi çalışıyor. Nedenini anlayamıyorum. Benim .html dosyasındanJQuery'den Controller'a Geçiş Parametreleri ASP.NET MVC 3'te İleti Eylemi

, aşağıdaki JQuery sorgu var: Benim denetleyicisi olarak

var vm = { emailAddress:"[email protected]" }; 
$.ajax({ 
    url: "/myService/myAction", 
    type: "GET", 
    data: JSON.stringify(vm), 
    contentType: "application/json", 
    success: myAction_Succeeded, 
    error: myAction_Failed 
}); 

, ben şu şekildedir:

public class MyServiceController : Controller 
{ 
    [AcceptVerbs(HttpVerbs.Get)] 
    public ActionResult MyAction(string emailAddress) 
    { 
    return Json(new { address:emailAddress }); 
    } 
} 

Benim rota kurgusunda:

context.MapRoute(
    "MyAction", 
    "myService/{controller}/MyAction", 
    new { controller = "MyService", action = "MyAction" } 
); 

Rotanızda bir şey kaçırdığımı gösteren bir önsezim var. Ama ne olduğundan emin değilim. POST işlemleriyle kullandığım aynı sözdizimini takip ettim. Bu eylemlere sahip parametreler iyi çalışır. Ancak, GET eylemlerimdeki parametreler, yukarıdaki gibi, null değerlere sahip. Sorum şu: ne yapıyorum ve birden çok parametreyi geçmem gerekirse ne yapmalıyım?

Yardımlarınız için çok teşekkür ederim!

cevap

4

ASP.NET MVC 3'te denetleyici eylemlerine JSON istekleri göndermenizi sağlayan JsonValueProviderFactory POST istekleriyle çalışır.

var vm = { emailAddress:"[email protected]" }; 
$.ajax({ 
    url: "/myService/myAction", 
    type: "GET", 
    data: vm, 
    success: myAction_Succeeded, 
    error: myAction_Failed 
}); 

Yoksa göndermek istiyorsanız JSON istekleri AJAX istekte type: 'POST' değiştirin: GET istekleri için standart bir isteği kullanabilirsiniz. Açıkçası bu durumda, denetleyicinizin eyleminden sadece 0 GET isteklerine sınırlayan HttpVerbs.Get özniteliğini kaldırmanız gerekecektir.

+0

Yardımlarınız için çok teşekkürler! –