it-swarm.com.de

C # MVC 4: Übergeben eines JavaScript-Arrays in View an den Controller

Wie übergeben Sie in MVC 4 ein JavaScript-Array in der Ansicht an eine Funktion im Controller mit AJAX?

Das scheint nicht die Arbeit zu sein:

$.ajax(
        {
            type: "POST",
            url: "../Home/SaveTable",
            data: { function_param: countryArray }
        });

Das Problem ist, dass countryArray ein globales Array in der JavaScript-Ansicht ist, und ich habe überprüft, ob es Elemente enthält, bevor es übergeben wird. Wenn die saveTable-Funktion das Array empfängt, sagt die Funktion jedoch, dass sie ein null-String [] -Array erhalten hat. 

Ich weiß nur, dass beim Übergeben von Arrays vom Controller zur View Sie komplexe Datentypen mit return Json(data, JsonRequestBehavior.AllowGet); serialisieren und diese dann durch eine Einstellung der Variable "var" deserialisieren.

Also muss ich das wahrscheinlich auch tun, aber wie?

Edit 1:

Hier ist die gekürzte Version der SaveTable-Funktion:

public string SaveTable(string[] function_param)
{
    if (function_param != null && function_param > 0)
    {
       //some code                
       return "Success";
    }

    //The following code will run if it's not successful. 
    return "There must be at least one country in the Region.";
    //Yeah it's always returning this b/c function_param is null;         
 }
11
RedAces

Sie müssen traditional: true einstellen, wenn Sie Arrays serialisieren.

$.ajax({
    type: "POST",
    traditional: true,
    url: "../Home/SaveTable",
    data: { function_param: countryArray }
});

Ich habe diese gute Erklärung gefunden, was traditional: true tut: https://stackoverflow.com/a/5497151/2419531

EDIT:

Wenn Sie traditional: true nicht verwenden möchten, können Sie die Daten mit JSON.stringify als Zeichenfolge übergeben und die contentType angeben:

$.ajax({
    type: "POST",
    url: "../Home/SaveTable",
    contentType: 'application/json',
    data: JSON.stringify({function_param: countryArray}),
});
21
Saravana

Sie sollten auf Ihrem Controller Folgendes verwenden:

public string SaveTable(object[] function_param)
{
   //some code
}

Sollte die Arbeit erledigen, ist dies für zukünftige Benutzer.

2
LP. Gonçalves

dein Ajax:

$.ajax({
    type: "POST",
    url: "../Home/SaveTable",
    contentType: 'application/json',
    data: {function_param: JSON.stringify(countryArray)},
});

in Ihrem Controller: 

using Newtonsoft.Json;

    public string SaveTable(string function_param)
    {
       dynamic func_param = JsonConvert.DeserializeObject(function_param)
    }

dann können Sie in Ihrem Controller ein Foreach ausführen.