Estou tentando passar uma matriz (ou IEnumerable) de ints do AJAX para uma ação MVC e preciso de uma ajudinha.
o javascript é
$.get('/controller/MyAction', { vals: arrayOfValues }, function (data) {...
e a ação do controlador é
public ActionResult MyAction(IEnumerable<int> arrayOfValues )
No momento, a solicitação está formatada como
controller/MyAction?_=1301503418429&arrayOfValues[]=491&arrayOfValues[]=368&arrayOfValues[]=235&arrayOfValues[]=437
Então, estou quase lá. Se tirar os colchetes, recebo a resposta correta. Como devo passar essa matriz para o meu get para que o controlador possa reconhecer o que é?
Muito obrigado pela sua ajuda
Dave
c#
asp.net-mvc
jquery
Dave
fonte
fonte
Eu tive problemas no passado ao tentar executar um POST (não tenho certeza se é exatamente isso que você está fazendo, mas eu lembro ao passar uma matriz, o tradicional deve ser definido como verdadeiro .
fonte
Bastante tarde, mas diferenteResposta das que já estão presentes aqui:
Se, em vez de
$.ajax
você desejar usar funções abreviadas$.get
ou$.post
, você pode passar matrizes desta maneira:Shorthand GET
POST taquigráfico
Notas:
$.param
é para atraditional
propriedade, que DEVE sertrue
para que isso funcione .fonte
Você deve conseguir fazer isso muito bem:
Então seu método de ação seria assim:
Para você, parece que você só precisa especificar seus valores. O JSONValueProvider no MVC converterá isso novamente em um IEnumerable para você.
fonte
A resposta para usar a opção 'tradicional' está correta. Estou apenas fornecendo mais informações básicas para quem deseja aprender mais.
Na documentação do jQuery:
Você também pode ler mais aqui: http://michaelsync.net/2012/04/05/tips-asp-net-mvc-javascriptserializer-3-questions-and-3-answers e http://haacked.com/archive /2008/10/23/model-binding-to-a-list.aspx
HTH
fonte
SE TODO O RESTO FALHAR...
Nenhuma das outras respostas aqui resolveu meu problema. Eu estava tentando fazer uma chamada de método GET do JavaScript para um controlador de MVC Web API e enviar uma matriz de números inteiros como um parâmetro dentro dessa solicitação. Eu tentei todas as soluções aqui, mas ainda assim o parâmetro no meu controlador estava chegando NULL (ou Nothing for you VB users).
Acabei encontrando minha solução em um post SO diferente , e era realmente muito simples: basta adicionar a
[FromUri]
anotação antes do parâmetro array no controlador ( eu também precisei fazer a chamada usando a configuração AJAX "tradicional" para evitar anotações entre colchetes ). Veja abaixo o código real que usei no meu aplicativo.Assinatura do Controlador:
NOTA: A anotação em C # seria
[FromUri]
JavaScript:
Sequência de URL real:
fonte
Um pouco tarde aqui, mas eu poderia usar a solução do SNag ainda mais em $ .ajax (). Aqui está o código se isso ajudaria alguém:
fonte
Se você estiver migrando para o ASP.NET Core MVC do .Net Framework MVC como eu, as coisas mudaram um pouco. A chamada ajax deve estar no objeto bruto usando stringify, portanto, em vez de transmitir dados
{ vals: arrayOfValues }
, deve serJSON.stringify(arrayOfValues)
o seguinte:A outra alteração feita no ASP.NET Core é impedir a falsificação de solicitações entre sites. Para chamadas para uma ação MVC a partir de um método ajax, o
[FromBody]
atributo deve ser aplicado ao parâmetro action da seguinte maneira:fonte
Se você estiver usando o ASP.NET Core MVC e precisar lidar com colchetes (em vez de usar a opção "tradicional" do jQuery)), a única opção que encontrei é criar manualmente
IEnumerable
o método no contoller.fonte
Eu trabalho com o asp.net core 2.2 e jquery e tenho que enviar um objeto complexo ('classe principal') de uma visão para um controlador com campos de dados simples e algumas matrizes.
Assim que adicionei a matriz na definição de 'classe principal' do c # (veja abaixo) e enviei a matriz (preenchida corretamente) sobre ajax (post), todo o objeto foi nulo no controlador.
Primeiro, pensei, a falta de "tradicional: verdadeiro" na minha chamada ajax foi o motivo, mas esse não é o caso.
No meu caso, o motivo foi a definição na classe principal do c #.
Na 'classe principal', eu tinha:
e EreignisTagNeu foi definido como:
Eu tive que mudar a definição na 'classe principal' para:
Agora funciona.
Então ... para mim, parece que o núcleo do asp.net tem um problema (com a postagem), se a lista de uma matriz não estiver completamente definida na 'classe principal'.
Nota: No meu caso, isso funciona com ou sem "tradicional: true" para a chamada ajax
fonte
Você precisa converter Array em string:
isso funciona mesmo na forma de int, long ou string
fonte