por objects net mvc llamar enviar desde controlador asp array c# asp.net-mvc jquery

c# - objects - Pase array a mvc Acción a través de AJAX



send array ajax asp net mvc (7)

SI TODO LO DEMÁS FALLA...

Ninguna de las otras respuestas aquí resolvió mi problema. Estaba intentando hacer una llamada al método GET desde JavaScript a un controlador de la API web de MVC, y enviar una matriz de enteros como un parámetro dentro de esa solicitud. Intenté todas las soluciones aquí, pero aún el parámetro en mi controlador venía NULL (o nada para los usuarios de VB).

Eventualmente encontré mi solución en una publicación SO diferente , y en realidad fue muy simple: simplemente agregue la anotación [FromUri] antes del parámetro de matriz en el controlador ( también tuve que hacer la llamada usando la configuración AJAX "tradicional" para evitar el paréntesis anotaciones ). Vea a continuación el código real que utilicé en mi solicitud.

Firma del controlador:

NOTA: la anotación en C # sería [FromUri]

JavaScript:

$.get(''/api/InventoryApi/GetBalanceField'', $.param({productIds: [42], inventoryFormId: 5493, inventoryBalanceType: ''Beginning''},true)).done(function(data) {console.log(data);});

Cadena de URL real:

http://randomhostname/api/InventoryApi/GetBalanceField?productIds=42&inventoryFormId=5493&inventoryBalanceType=Beginning

Estoy intentando pasar una matriz (o IEnumerable) de entradas desde AJAX a una acción de 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[]=437

Así que estoy casi 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 de qué se trata?

Muchas gracias por su ayuda

Dave


Deberías poder hacer esto bien:

$.ajax({ url: ''controller/myaction'', data: JSON.stringify({ myKey: myArray }), success: function(data) { /* Whatever */ } });

Entonces tu método de acción sería así:

public ActionResult(List<int> myKey) { // Do Stuff }

Para ti, parece que solo necesitas codificar tus valores. JSONValueProvider en MVC lo convertirá de nuevo en un IEnumerable para usted.


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 cuando intento 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 .

var arrayOfValues = new Array(); //Populate arrayOfValues $.ajax({ type: "POST", url: "<%= Url.Action("MyAction","Controller")%>", datatype: "json", traditional: true, data: { ''arrayOfValues'': arrayOfValues } });


La respuesta para usar la opción ''tradicional'' es correcta. Solo estoy brindando más información de antecedentes para esto que desean aprender más.

De la documentación jQuery:

A partir de jQuery 1.8, el método $ .param () ya no usa jQuery.ajaxSettings.traditional como su configuración predeterminada y tendrá el valor predeterminado en falso.

También puede leer más aquí: http://michaelsync.net/2012/04/05/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


Necesita convertir Array en cadena:

//arrayOfValues = [1, 2, 3]; $.get(''/controller/MyAction'', { arrayOfValues: "1, 2, 3" }, function (data) {...

esto funciona incluso en forma de int, largo o cadena

public ActionResult MyAction(int[] arrayOfValues )


Una respuesta bastante tardía, pero diferente a las que ya están aquí:

Si en lugar de $.ajax quieres usar las funciones abreviadas $.get o $.post , puedes pasar matrices de esta manera:


Taquigrafía GET

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 }

Taquigrafía POST

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:

  • El parámetro booleano en $.param es para la propiedad traditional , que DEBE ser true para que esto funcione .