two one net mvc multiple form buttons asp jquery asp.net-mvc-3 defaultmodelbinder

jquery - one - mvc submit button action



Cómo enviar una lista de int con jQuery a ASP.net MVC Default Model Binder (2)

Cuando envío una lista de int con jQuery de esta manera:

$.ajax(''@Url.Action("Execute")'', { type: ''POST'', data: { pkList: [1,2,3] } });

Entonces jQuery transformará el objeto pkList y lo enviará por correo de esta manera:

pkList[]:1 pkList[]:2 pkList[]:3

Lo cual estaría bien si el servidor es PHP pero yo uso Asp.NET MVC3 y trato de obtener estos valores con la carpeta de modelo predeterminada:

public ActionResult Execute(ICollection<int> pkList)

Pero pkList siempre es nulo, parece que el archivador de modelo predeterminado no puede vincularlo.

¿Cómo soluciono esto correctamente?

SOLUCIÓN AGREGADA

Usé 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 ya no agrega [] a los parámetros y se envían así:

pkList:1 pkList:2 pkList:3

Y la carpeta de modelo predeterminada de MVC obtiene los valores correctamente.

Espero que esto ayude a alguien.



Puede usar una solicitud JSON ya que le permitirá enviar cualquier objeto complejo que desee:

$.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 } });

El método JSON.stringify está construido en navegadores modernos y si desea admitir navegadores heredados, puede incluir el script json2.js en su sitio.

Y para responder a su pregunta, puede usar establecer la opción traditional: true para indicarle a jQuery que retroceda a la serialización tradicional de parámetros, ya que esto ha cambiado en jQuery 1.4 y si está utilizando una versión posterior, tiene la posibilidad de volver al modo los parámetros están serializados:

$.ajax({ url: ''@Url.Action("Execute")'', type: ''POST'', data: { pkList: [1, 2, 3] }, traditional: true });