Estoy tratando de pasar una matriz (o IEnumerable) de ints 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 )En este momento la solicitud está formateada como
controller/MyAction?_=1301503418429&arrayOfValues[]=491&arrayOfValues[]=368&arrayOfValues[]=235&arrayOfValues[]=437Ya casi llego, si quito los corchetes obtengo la respuesta correcta. ¿Cómo debo pasar esa matriz a mi obtención para que el controlador pueda reconocer qué es?
Muchas gracias por su ayuda
dave
Establezca la propiedad tradicional en verdadero antes de realizar la llamada de obtención. es decir:
jQuery.ajaxSettings.traditional = true $.get('/controller/MyAction', { vals: arrayOfValues }, function (data) {...He tenido problemas en el pasado al intentar realizar un 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 .
var arrayOfValues = new Array(); //Populate arrayOfValues $.ajax({ type: "POST", url: "<%= Url.Action("MyAction","Controller")%>", traditional: true, data: { 'arrayOfValues': arrayOfValues } });Una respuesta bastante tardía, pero diferente a las que ya están presentes aquí:
Si en lugar de $.ajax desea utilizar las funciones abreviadas $.get o $.post , puede pasar matrices de esta manera:
Obtener taquigrafía
var array = [1, 2, 3, 4, 5]; $.get('/controller/MyAction', $.param({ data: array }, true), function(data) {}); // Action Method public void MyAction(List<int> data) { // do stuff here }POST abreviado
var array = [1, 2, 3, 4, 5]; $.post('/controller/MyAction', $.param({ data: array }, true), function(data) {}); // Action Method [HttpPost] public void MyAction(List<int> data) { // do stuff here }
Notas:
$.param es para la propiedad traditional , que DEBE ser true para que esto funcione .