Cuando envío una lista de de int con jQuery así:¿Cómo enviar una lista de int con jQuery para ASP.net MVC Modelo predeterminado Carpeta
$.ajax('@Url.Action("Execute")', {
type: 'POST',
data: {
pkList: [1,2,3]
}
});
Entonces jQuery transformará el objeto pkList y enviarlo por post como este:
pkList[]:1
pkList[]:2
pkList[]:3
que estaría bien si el servidor es PHP pero yo uso Asp.NET MVC3 y tratar de conseguir estos valores con el modelo por defecto ligante:
public ActionResult Execute(ICollection<int> pkList)
Pero pkList siempre es nulo, parece que el archivador de modelo predeterminado no puede vincularlo.
¿Cómo resuelvo esto correctamente?
AÑADIDOSOLUCIÓN
he utilizado la solución de Darin Dimitrov con la configuración de la opción traditional
en jQuery:
$.ajax('@Url.Action("Execute")', {
type: 'POST',
traditional: true,
data: {
pkList: [1,2,3]
}
});
Ahora jQuery no agrega el []
a los parámetros más y se envían así:
pkList:1
pkList:2
pkList:3
Y el encuadernador de modelo predeterminado MVC obtiene los valores correctamente.
Espero que esto ayude a alguien.
no será el aglutinante de modelo por defecto también se encargan listas separadas por comas de datos codificados por formulario también? Algo como 'data: {pkList: '1,2,3'}'? Pero de lo contrario, uso este método para toda la serialización de modelos, el camino a seguir para objetos más complejos en JS. –
@PaulT., No, el archivador de modelo predeterminado no aceptará 'datos: {pkList: '1,2,3'}'. Si desea manejar tales solicitudes, será necesario un archivador de modelo personalizado en el que necesite dividir las entradas y luego analizar cada una de nuevo en un entero.No sería necesario pasar por este dolor si el objetivo es enviar una matriz de enteros a una acción de controlador. –
ah sí veo lo que quieres decir ahora, simplemente lo probé, aunque es extraño porque si tienes dos entradas con el mismo nombre, eso realmente deserializa eso a una lista, solo la serialización de jQuery para formar datos de correos no maneja eso (es decir, .pkList = 1 & pkList = 2 funciona) –