2012-10-22 23 views
15

Próbuję wykonać żądanie AJAX za pomocą $ .ajax w MVC 4 z Razor. Nie jestem pewien, jak to wdrożyć.

Za pomocą this video Udało mi się wykonać połączenie oparte na połączeniu, które zwróciło dane, ale nie mogę zrobić tego samego z poziomu funkcji jquery. Nie mogę znaleźć żadnych podstawowych przykładów, jak to zrobić. To co pracuję z:

HomeController.cs

 public string test(){ 
      return "It works"; 
     } 

View.cshtml

function inventory(dealerID) { 
    $.ajax({ 
     url: '@Url.Action("HomeController","test")', 
     data: {dealerID: dealerID}, 
     type: 'POST', 
     success: function(data) { 
      process(data); 
     } 
    }); 
} 

Odpowiedz

28

Wystarczy, czyniąc ją ActionResult. Ponadto, jeśli używasz POST Ajax, akcja musi być oznaczona atrybutem HttpPost. Spróbuj tego:

[HttpPost] 
public ActionResult test(string dealerID) 
{ 
    return Content("It works"); 
} 

Edycja Faktycznie, istnieje kilka innych problemów ze składnią.

  1. Url.Action posiada parametry kontroler/działanie w złej kolejności - powinno być „ActionName”, potem „ControllerName”
  2. Dla Url.Action, jeśli klasa kontrolera jest „HomeController”, to trzeba po prostu " Strona główna "
  3. Składnia opcji JQuery jest błędna - powinna być success: function(data) {}.

$.ajax({ 
    url: '@Url.Action("test", "Home")', 
    data: {dealerID: dealerID}, 
    type: 'POST', 
    success: function(data) { 
     alert(data); 
    } 
}); 
+0

Dziękuję bardzo! Teraz działa. – Mason

+0

W twoim przykładzie, w jaki sposób metoda 'test()' pobiera 'dealerId' z JSON, który wysyłasz? Czy powinienem założyć, że jest on przekazywany jako parametr do metody i po prostu go pominięto? – crush

+3

@crush tak, dokładnie. System routingu MVC jest wystarczająco elastyczny, aby pobierać parametry kontrolera z dowolnego miejsca, w którym są dostępne - ciąg zapytania, dane postu lub dane trasy. – McGarnagle