Как отправить список int с jQuery в ASP.NET MVC Model Model Binder
Когда я отправляю список int с jQuery следующим образом:
$.ajax('@Url.Action("Execute")', {
type: 'POST',
data: {
pkList: [1,2,3]
}
});
Затем jQuery преобразует объект pkList и отправит его по почте следующим образом:
pkList[]:1
pkList[]:2
pkList[]:3
Что было бы хорошо, если сервер PHP, но я использую Asp.NET MVC3 и пытаюсь получить эти значения с привязкой к модели по умолчанию:
public ActionResult Execute(ICollection<int> pkList)
Но pkList всегда имеет значение null, кажется, что связующее устройство по умолчанию не может связывать его.
Как я могу решить эту проблему правильно?
ADDED РЕШЕНИЕ
Я использовал решение от Дарина Димитрова с настройкой опции traditional
в jQuery:
$.ajax('@Url.Action("Execute")', {
type: 'POST',
traditional: true,
data: {
pkList: [1,2,3]
}
});
Теперь jQuery больше не добавляет []
к параметрам, и они отправляются следующим образом:
pkList:1
pkList:2
pkList:3
И связующее устройство модели MVC по умолчанию получает значения правильно.
Надеюсь, это поможет кому-то.
Ответы
Ответ 1
Вы можете использовать запрос JSON, так как он позволит вам отправлять любые сложные объекты:
$.ajax({
url: '@Url.Action("Execute")',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify({ pkList: [1, 2, 3] }), // you could throw any javascript object you like here
success: function(result) {
// process the results
}
});
Метод JSON.stringify
построен в современных браузерах, и если вы хотите поддерживать устаревшие браузеры, вы можете включить json2.js script на ваш сайт.
И чтобы ответить на ваш вопрос, вы можете использовать параметр traditional: true
, чтобы указать jQuery на возврат к традиционной сериализации параметров, поскольку это изменилось в jQuery 1.4, и если вы используете более позднюю версию, у вас есть возможность переключиться назад к параметрам сериализуются:
$.ajax({
url: '@Url.Action("Execute")',
type: 'POST',
data: {
pkList: [1, 2, 3]
},
traditional: true
});
Ответ 2
У Фила Хаака есть замечательная статья в его блоге, которая должна указывать на вас в правильном направлении.
привязка модели к списку