Я пытаюсь передать массив (или IEnumerable) int через AJAX в действие MVC, и мне нужна небольшая помощь.
javascript
$.get('/controller/MyAction', { vals: arrayOfValues }, function (data) {...
и действие контроллера
public ActionResult MyAction(IEnumerable<int> arrayOfValues )
На данный момент запрос отформатирован как
controller/MyAction?_=1301503418429&arrayOfValues[]=491&arrayOfValues[]=368&arrayOfValues[]=235&arrayOfValues[]=437
Так что я почти у цели, если снять квадратные скобки, я получу правильный ответ. Как мне передать этот массив в свой get, чтобы контроллер мог распознать, что это такое?
Большое спасибо за вашу помощь
Дейв
c#
asp.net-mvc
jquery
Дейв
источник
источник
В прошлом у меня были проблемы при попытке выполнить POST (не уверен, что это именно то, что вы делаете, но я вспоминаю, что при передаче массива в традиционное значение должно быть установлено значение true .
источник
Довольно поздний, но отличный от уже представленных здесь ответ:
Если вместо этого
$.ajax
вы хотите использовать сокращенные функции$.get
или$.post
, вы можете передавать массивы следующим образом:Сокращение GET
Сокращение POST
Ноты:
$.param
предназначен дляtraditional
свойства, которое ДОЛЖНО быть,true
чтобы это работало .источник
У вас должно получиться отлично:
Тогда ваш метод действий будет таким:
Для вас это выглядит так, как будто вам просто нужно преобразовать свои значения в строку. JSONValueProvider в MVC преобразует это обратно в IEnumerable для вас.
источник
Ответ на использование «традиционного» варианта правильный. Я просто предоставляю дополнительную информацию для тех, кто хочет узнать больше.
Из документации jQuery:
Вы также можете прочитать больше здесь: http://michaelsync.net/2012/04/05/tips-asp-net-mvc-javascriptserializer-3-questions-and-3-answers и http://haacked.com/archive /2008/10/23/model-binding-to-a-list.aspx
НТН
источник
ЕСЛИ ВСЕ ОСТАЛЬНОЕ ТЕРПИТ НЕУДАЧУ...
Ни один из других ответов здесь не решил мою проблему. Я пытался выполнить вызов метода GET из JavaScript в контроллер веб-API MVC и отправить массив целых чисел в качестве параметра в этом запросе. Я пробовал все решения здесь, но все же параметр на моем контроллере приближался к NULL (или NULL для пользователей VB).
В конце концов я нашел свое решение в другом сообщении SO , и на самом деле оно было действительно простым: просто добавьте
[FromUri]
аннотацию перед параметром массива в контроллере ( мне также пришлось сделать вызов, используя «традиционный» параметр AJAX, чтобы избежать аннотаций в скобках ). Ниже приведен фактический код, который я использовал в своем приложении.Подпись контроллера:
ПРИМЕЧАНИЕ: аннотация на C # будет
[FromUri]
JavaScript:
Фактическая строка URL:
источник
Здесь немного поздно, но я мог бы использовать решение SNag в $ .ajax (). Вот код, если это кому-то поможет:
источник
Если вы переходите на ASP.NET Core MVC из .Net Framework MVC, как и я, все немного изменилось. Вызов ajax должен быть на необработанном объекте с использованием stringify, поэтому вместо передачи данных
{ vals: arrayOfValues }
он должен бытьJSON.stringify(arrayOfValues)
следующим:Другое изменение, внесенное в ASP.NET Core, - предотвращение подделки межсайтовых запросов, поэтому для вызовов действия MVC из метода ajax
[FromBody]
атрибут должен применяться к параметру действия следующим образом:источник
Если вы используете ASP.NET Core MVC и вам нужно обрабатывать квадратные скобки (вместо того, чтобы использовать «традиционный» вариант jQuery), единственный вариант, который я нашел, - это вручную создать
IEnumerable
метод контроллера.источник
Я работаю с asp.net core 2.2 и jquery, и мне нужно отправить сложный объект («основной класс») из представления в контроллер с простыми полями данных и некоторыми массивами.
Как только я добавил массив в определение "основного класса" С # (см. Ниже) и отправил (правильно заполненный) массив через ajax (сообщение), весь объект в контроллере стал нулевым.
Во-первых, я подумал, что причиной моего вызова ajax было отсутствие «традиционного: истина», но это не так.
В моем случае причиной было определение в "основном классе" С #.
В «основном классе» у меня было:
и EreignisTagNeu был определен как:
Мне пришлось изменить определение в «основном классе» на:
Теперь это работает.
Итак ... мне кажется, что у ядра asp.net есть проблема (с сообщением), если список для массива не полностью определен в «основном классе».
Примечание. В моем случае это работает с «традиционным: истинным» или без него для вызова ajax.
источник
Вам нужно преобразовать массив в строку:
это работает даже в форме int, long или string
источник