2013-05-29 2 views
0

Я пытаюсь передать идентификаторы отмеченных ящиков контроллеру с помощью ajax. Вот jQuery:ajax не передает массив контроллеру

function compareEvents() { 
     var selected = new Array(); 
     $('input:checked').each(function() { 
      selected.push($(this).attr('id')); 
      alert("Event " + $(this).attr('id') + " will be compared"); 
     }); 

     $.ajax({ 
      url: "/Event/CompareEvents", 
      contentType: "application/x-www-form-urlencoded", 
      type: "POST", 
      datatype: "json", 
      data: JSON.stringify({eventIds:selected}), 
      error: function (xmlHttpRequest, errorText, thrownError) { 
       alert(xmlHttpRequest, errorText, thrownError); 
      }, 
      success: function (data) { 
       alert("success"); 
       document.location = data; 
      } 
     }); 

Предупреждение успешно возвращает идентификаторы отмеченных флажков. И возвращает сообщение об успешном завершении.

Вот метод управления:

[HttpPost] 
    public ActionResult CompareEvents(List<int> eventIds) 
    { 
     return null; 
    } 

Это вызывается успешно, за исключением того, когда я отладки, eventIds возвращается null. Может ли кто-нибудь понять, почему eventIds не получает правильные значения?

ответ

2

Вы отправляете JSON:

data: JSON.stringify({ eventIds:selected }), 

и установки заголовка CONTENTTYPE в "application/x-www-form-urlencoded".

Будьте последователен с тем, что вы отправляете:

contentType: "application/json", 

Также нет такого параметра, называемого datatype. Фактическая настройка - dataType, но она избыточна, потому что, если ваше действие контроллера устанавливает заголовок ответа Content-Type на application/json (который обычно требуется, если вы возвращаете JsonResult), jQuery достаточно умен, чтобы использовать этот заголовок и обрабатывать ответ от сервер и передать уже обработанный объект на ваш обратный вызов успеха.

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