#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
котором используется традиционный стиль сериализации параметров.