8 Stimmen

JS int-Array an MVC3-Controller

Ich habe ein Array von Zeichenfolgen in JS. Alle Mitglieder sind eigentlich Zahlen.
Mein Controller hat einen int[]-Parameter.

Ich sende es von Jquery aus:

$.ajax({url: someUrl, data: {ids : JSON.stringify(id_array) }, ...)

und ich empfange sie über

public ActionResult MyAction(int[] ids) { ...

Der Parameter wird nicht ausgefüllt, ich habe es überprüft, die Request.Form["ids"] enthält " [\"25\",\"26\"]" die String-Repräsentation des JSON-Arrays. Gibt es eine Möglichkeit, dies automatisch zu tun ohne eine Menge Int-Parsing?

11voto

Keith.Abramo Punkte 6909

Haben Sie versucht, nicht Stringifying das Array und lassen mvc's Standardmodellbindung die Magie tun

$.ajax({url: someUrl, data: {ids : id_array }, ...)

Ich bin ziemlich sicher, dass .net MVC das Array sehen und sehen, es ist ein Array von ints und es zu Ihrem Array von ints korrekt zuordnen wird

11voto

Lloyd Punkte 7804

Für MVC3 müssen Sie jQuery so konfigurieren, dass es die traditionelle, "flache" Serialisierung verwendet. Siehe aquí .

Client-seitige AJAX-Anfrage:

jQuery.ajaxSettings.traditional = true; //enable "shallow" serialisation globally
$.get("someUrl", {ids : id_array });

Aktionsmethode:

public ActionResult MyAction(string[] ids) { ... }

4voto

adyusuf Punkte 806

Sie können dies auf zwei verschiedene Arten tun

1. Verwenden Sie $.ajax, um Daten an Ihre Aktion zu senden

$.ajax({
    url: '/myController/myAction',
    dataType: 'json',
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    traditional: true,
    data: $.toJSON(json),
    success: function (data, textStatus, jqXHR) {
    ...
    }
});

Ihre Aktion sollte wie folgt aussehen

public class myController
{
    [HttpPost]
    public ActionResult myAction(List<int> json)
    {
        ....
    }
}

2. Verwenden Sie $.post, um Ihre Daten zu veröffentlichen

$.post(
    '/myController/myAction',
    { json: $.toJSON(products) },
    function (data) {
    ...
});

In Ihrer Aktion sollten Sie JSON-String deserialisieren

public class myController
    {
    public ActionResult myAction(string json)
    {
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        List<int> list = serializer.Deserialize<List<int>>(json);
    }
}

Sie müssen jquery.json-2.2.min.js herunterladen und in Ihren Code einfügen.

http://code.google.com/p/jquery-json/downloads/detail?name=jquery.json-2.2.min.js

0voto

Gabriele Petrioli Punkte 182294

Sie müssen Folgendes verwenden

$.ajax({
    url: someUrl, 
    data: id_array.map( function(item){ return {name:'ids',value:item}; })
})

Denn um eine Liste im Backend zu erhalten, müssen die Daten in der folgenden Form gesendet werden ids=3&ids=5&ids=1&ids=7


Für IE-Versionen, die Folgendes nicht unterstützen .map verwenden.

function arrayToParamObject(name,array){
    var obj = [];
    for (var i = 0, len = array.length; i< len; i++){
        obj.push( {name: name, value: array[i] } );
    }
    return obj;
}

und verwenden Sie es

$.ajax({
    url: someUrl, 
    data: arrayToParamObject('ids', id_array)
})

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X