2013-07-10 2 views
1

Я не могу добраться до контроллера. Я думаю, что это может быть URL, но я пробовал разные варианты. Я пытался понять это слишком долго.Ajax Post to Controller - MVC4

$.ajax({ 
        url: '@Url.Action("ajaxCall", "ContactForm")',       
        type: "POST", 
        cache: false, 
        dataType: 'json',      
        contentType: 'application/json; charset=utf-8', 
        data: JSON.stringify("test"),   
        success: function() { 
         alert("success"); 
        }, 
        error: function() { 
         alert("fail"); 
        } 

       }) 

Это мой контроллер.

namespace form.Controllers 
    { 
     public class ContactFormController : Controller 
     { 


      [HttpPost] 
      public ActionResult ajaxCall(string s) 
      {    
       return Content(""); 
      } 
    } 
} 

Любая идея, что не так?

ответ

2

Я вижу 2 вопроса с примером, который вы предоставили.

  1. Метод URL.Action будет возвращать только '/ContactForm/ajaxCall' когда то, что вам нужно это полное URL (' http://servername.com/ContactForm/ajaxCall ')

  2. Клиент Javascript ожидает сервер, чтобы отправить обратно JSON и ваше действие контроллера возвращается HTML. Измените действие контроллера, чтобы вернуть «JsonResult», и он должен работать нормально, я тестировал.

0

Не указывайте слово «Controller» в вызове @Url.Action():

@Url.Action("ajaxCall", "ContactForm") 

Он не ищет имя класса, он ищет контроллера имя, и в ASP.NET MVC конвенции слово «контроллер» является частью имени класса, чтобы указать, что в этом случае это контроллер, иначе называемый «ContactForm».

+0

Я действительно пробовал это, и он все еще нажимал ошибку – mwhite14

+0

@ mwhite14: Каков ответ с сервера? – David

+0

Он никогда не попадает на сервер. Это будет функция ошибки. Значение данных, которое оно дает ему [object Object], не важно, поскольку оно даже не попадает на сервер. – mwhite14

0

Если ответ Давида не получает вас всю дорогу туда (обязательно смотреть на отображаемой странице, чтобы увидеть, что он выдает, чтобы быть уверенным), попробуйте оборачивать код Razor в фигурных скобках:

@{Url.Action("ajaxCall", "ContactForm")} 
0

У вас проверено:

url: '@Url.Action("ajaxCall", "ContactForm") 

Нельзя указывать полное имя класса контроллера. Вы также можете попробовать название маршрута.

+0

@ mwhite14: Жесткий код URL, чтобы устранить эту возможность. Затем попытайтесь выяснить, какова конкретная ошибка. «код» ошибка: функция (ошибка) { ** предупреждение ('ошибка;' + eval (ошибка)); ** } 'code' – Taylor

0

Попробуйте размещение объектов JavaScript, как это:

var value = { s : 'Test string' } 

А на АЯКС вызова:

data: JSON.stringify(value) 

Так модель связующий найдет свойство Ань S 'для отображения в «с» параметр.

В соответствии с параметром ajax dataType вы должны вернуть JsonResult из действия: этот параметр является ожидаемым типом ответа, полученным от сервера.

Смежные вопросы