Estoy tratando de pasar una matriz (o IEnumerable) de entradas desde AJAX a una acción MVC y necesito un poco de ayuda.
el javascript es
$.get('/controller/MyAction', { vals: arrayOfValues }, function (data) {...
y la acción del controlador es
public ActionResult MyAction(IEnumerable<int> arrayOfValues )
Por el momento, la solicitud está formateada como
controller/MyAction?_=1301503418429&arrayOfValues[]=491&arrayOfValues[]=368&arrayOfValues[]=235&arrayOfValues[]=437
Así que ya casi estoy allí, si quito los corchetes obtengo la respuesta correcta. ¿Cómo debería pasar esa matriz a mi get para que el controlador pueda reconocer lo que es?
Muchas gracias por su ayuda
Dave
c#
asp.net-mvc
jquery
Dave
fuente
fuente
He tenido problemas en el pasado al intentar realizar una POST (no estoy seguro de si eso es exactamente lo que está haciendo, pero recuerdo que al pasar una matriz, tradicional debe establecerse en verdadero .
fuente
Una respuesta bastante tardía pero diferente a las ya presentes aquí:
Si, en lugar de
$.ajax
utilizar las funciones abreviadas$.get
o$.post
desea, puede pasar matrices de esta manera:Taquigrafía GET
Taquigrafía POST
Notas:
$.param
es para latraditional
propiedad, que DEBE sertrue
para que esto funcione .fuente
Deberías poder hacer esto bien:
Entonces su método de acción sería así:
Para usted, parece que solo necesita clasificar en cadena sus valores. El JSONValueProvider en MVC lo convertirá de nuevo en un IEnumerable para usted.
fuente
La respuesta para usar la opción 'tradicional' es correcta. Solo proporciono más información de fondo para esto que desea obtener más información.
De la documentación de jQuery:
También puede leer más aquí: http://michaelsync.net/2012/04/04/tips-asp-net-mvc-javascriptserializer-3-questions-and-3-answers y http://haacked.com/archive /2008/10/23/model-binding-to-a-list.aspx
HTH
fuente
SI TODO LO DEMÁS FALLA...
Ninguna de las otras respuestas aquí resolvió mi problema. Intenté hacer una llamada al método GET desde JavaScript a un controlador MVC Web API, y enviar una matriz de enteros como parámetro dentro de esa solicitud. Intenté todas las soluciones aquí, pero el parámetro en mi controlador seguía siendo NULL (o Nothing para ustedes, usuarios de VB).
Finalmente encontré mi solución en una publicación SO diferente , y en realidad fue muy simple: solo agregue la
[FromUri]
anotación antes del parámetro de matriz en el controlador ( también tuve que hacer la llamada usando la configuración AJAX "tradicional" para evitar anotaciones entre paréntesis ). Vea a continuación el código real que utilicé en mi aplicación.Firma del controlador:
NOTA: La anotación en C # sería
[FromUri]
JavaScript:
Cadena de URL real:
fuente
Un poco tarde aquí, pero podría usar la solución de SNag más en $ .ajax (). Aquí está el código si ayudaría a alguien:
fuente
Si está migrando a ASP.NET Core MVC desde .Net Framework MVC como yo, las cosas han cambiado ligeramente. La llamada ajax debe estar en el objeto sin formato utilizando stringify, por lo que en lugar de pasar datos del
{ vals: arrayOfValues }
mismo debe ser elJSON.stringify(arrayOfValues)
siguiente:El otro cambio que se ha realizado en ASP.NET Core es evitar la falsificación de solicitudes entre sitios, por lo que para las llamadas a una acción MVC desde un método ajax, el
[FromBody]
atributo debe aplicarse al parámetro de acción de la siguiente manera:fuente
Si está utilizando ASP.NET Core MVC y necesita manejar los corchetes (en lugar de usar la opción "tradicional" jQuery), la única opción que he encontrado es compilar manualmente
IEnumerable
en el método de control.fuente
Trabajo con asp.net core 2.2 y jquery y tengo que enviar un objeto complejo ('clase principal') desde una vista a un controlador con campos de datos simples y algunos arreglos.
Tan pronto como agregué la matriz en la definición de 'clase principal' de c # (ver más abajo) y envié la matriz (llena correctamente) sobre ajax (post), todo el objeto era nulo en el controlador.
Primero, pensé, el "tradicional: verdadero" que faltaba en mi llamada ajax fue la razón, pero este no es el caso.
En mi caso, la razón fue la definición en la clase principal de c #.
En la 'clase principal', tuve:
y EreignisTagNeu se definió como:
Tuve que cambiar la definición en la 'clase principal' a:
Ahora funciona.
Entonces ... para mí parece que asp.net core tiene un problema (con post), si la lista de una matriz no está completamente definida en la 'clase principal'.
Nota: en mi caso, esto funciona con o sin "tradicional: verdadero" para la llamada ajax
fuente
Necesita convertir Array en cadena:
esto funciona incluso en forma de int, long o string
fuente