2012-02-02 15 views
17

¿Cómo puedo enviar una matriz int desde $ .ajax a C# mvc?¿Cómo puedo enviar una matriz int de ajax a C# mvc?

+0

me trataron 3-4 ejemplos no puedo ejecutarlo. ¿Cuál puede ser una razón? – Spirit

+0

[Ajax] public bool example (int [] ints) – Spirit

+1

Por favor, brinde más detalles de lo que ha intentado y del resultado que está viendo, incluido el código. –

Respuesta

31
$.ajax({ 
      url: <Url of the action>, 
      type: "POST", 
      data: JSON.stringify([1,2,3]), 
      dataType: "json", 
      contentType: 'application/json; charset=utf-8' 
}); 

y en la acción.

public ActionResult ReceiveIntArray(int[] ints) 
{ 
    ... 
} 

mvc debería analizar automáticamente el json.

la salida this question.

+1

No funciona desde mi código ... no puedo entender el motivo. Cuando ingreso el método, el parámetro es nulo. – Spirit

+3

siento que tendrías que usar JSON.stringify ([1,2,3]) He editado la respuesta – Daniel

+0

¡hurra! ahora funciona bien :) – Spirit

1

La manera más simple sería enviar una lista de cadenas delimitada (comas, posiblemente) de los ints como un argumento en una solicitud GET, luego use Sting.Split() para analizarlos en su receptor C# MVC.

Así, por ejemplo $.get("/path-to/receiver/", { myArray: myArray.toString() });

A continuación, en el servidor, utilice

string[] stringArray = Request.QueryString["myArray"].ToString().Split(',')

para extraer los valores de una matriz de cadenas, a continuación, Int32.TryParse para finalmente obtener una matriz de enteros.

jQuery GET Syntax
JS Array toString() syntax

+0

No envía valores. No hay nada que analizar. – Spirit

+0

Esto es solo un ejemplo: necesitarías reemplazar "myArray" etc. con tus propios valores. La url de la solicitud debe ser algo así como/path-to/receiver /? MyArray = your, array, contents –

2

solución Trate de this question:

establecer la propiedad traditional true antes de hacer la llamada a conseguir. es decir .:

jQuery.ajaxSettings.traditional = true 

$.get('/controller/MyAction', 
    { vals: arrayOfValues }, 
    function (data) { 
     ... 
    } 
+0

El código no envía valores. Link es bueno – Spirit

1

La forma en que estoy haciendo es con un simple elemento de input:hidden

<input type="hidden" name="elements" value='@String.Join(",", ViewBag.MyArray)' /> 

Y en el código JavaScript que estoy pasando como una cadena:

$.ajax({ 
    type: "POST", 
    url: '/Controller/Method', 
    data: 
     { 
      recipients: $("input[name=elements]").val() 
     }, 
     traditional: true, 
     success: updateSelected 
}); 

Y finalmente acabo de Split elementos como este:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Method(string elements) 
{ 
    IList<long> selected = elements.Split<long>(','); 
    ... 
} 
+0

updateSelected underfined. – Spirit

+0

sin él no envía nada. – Spirit

0

Pruebe esta solución:

var Array = [10, 20, 30]; 

$.ajax({ 
    type: "Post", 
    datatype: "Json", 
    url: <Url of the action>, 
    data: JSON.stringify(Array), 
    contentType: 'application/json; charset=utf-8', 

}); 
Cuestiones relacionadas