Обеспечение совместимости объекта List с данными post из интерфейса в ASP.NET MVC3

#c# #asp.net-mvc-3 #jquery #post

#c# #asp.net-mvc-3 #jquery #Публикация

Вопрос:

У меня есть следующий контроллер, который я отправляю в форме через AJAX:

 [HttpPost]
public ActionResult Create(List<int> listOfSTuff)
{
    try
    {
        service.Create(listOfSTuff);
    }
    catch
    {
        return null;
    }
    return Json(new { gid = 7 }); // hardcoded for simplicity
}
  

У меня возникли трудности с тем, что мой jQuery AJAX post делает List тип данных совместимым с данными post. Вот мой код jQuery / JavaScript:

 var listOfStuff = [1, 2, 3];

$.ajax({
    type: 'POST',
    url: '/MyController/Create',
    data: listOfStuff,
    success: function(data) {
        alert(data.gid);
    },
    error: alert(':('),
    dataType: 'json'
});
  

Я знаю, что сообщение AJAX для контроллера работает, потому что я получаю gid , но я не вижу элементов массива 1 или 2 или 3 , сохраненных в базе данных. Не похоже, что контроллеру нравится мой массив JavaScript, который передается. Может ли кто-нибудь предложить, как должна выглядеть структура данных из интерфейса, чтобы сделать ее совместимой с List ожидаемым действием контроллера?

Ответ №1:

Сделайте ваш listOfStuff объявленным как таковой:

 var listOfStuff = {postedValues: [1, 2, 3]};
  

Лучше отформатировать ваши размещенные данные как надлежащий объект JSON перед отправкой их на контроллер. итак, теперь:

data: listOfStuff , опубликует правильную строку JSON

и измените имя параметра в вашем контроллере на:

 [HttpPost] 
public ActionResult Create(List<int> postedValues) 
{ 
} 
  

Надеюсь, это сработает для вас.

Комментарии:

1. Спасибо! Я попробую это сделать и расскажу вам, как это работает.

Ответ №2:

Оказывается, мне не хватало критического параметра в вызове jQuery AJAX, который заставляет это работать:

Существует traditional атрибут, который используется false по умолчанию, но для него необходимо установить значение, в true котором используется традиционный стиль сериализации параметров.