C# asp.net: C# String-Array an JavaScript weitergeben

mosquito87

Lieutenant
Registriert
Aug. 2006
Beiträge
980
Hi zusammen,

in einer Webanwendung (asp.net MVC 3) will ich von meinem in C# geschriebenen Controller ein String-Array zurückgeben, was von JavaScript verwendet werden können soll:

Code:
public string getString()
        {
            string[] liste = new string[] { "String 1", "String 2", "String 3" };

            return (new JavaScriptSerializer()).Serialize(liste);
        }

In meiner View hole ich mir dann den String der Methode des Controllers via jQuery/Ajax. Das klappt prinzipiell. Aber die Umwandlung in den JavaScript-Array geht schief.

Code:
<script type="text/javascript">
    function jsFunktion() {
        $.ajax({
            url: "Home/getString",
            success: function (data) {
                alert(data);
                alert(data.length);
            }
        });
    }
</script>

Die Länge ist die Länge der Gesamtzeichen. JavaScript denkt wohl, es handelt sich um einen String. Es soll sich aber um einen String-Array handeln.

Hmmm ...

Wer kann hier weiterhelfen?
 
Probiers mal mit:
public string[] getString()

statt
public string getString()
 
string ist schon richtig, denn das liefert die Serialize Methode immer zurück.
Schau' dir mal die msdn Seite mit dem Beispiel an. Dort wird zusätzlich ein Konverter registriert.

Edit: Es könnte auch einfach sein, dass du den String in JavaScript wieder De-Serialisieren musst.
 
Zuletzt bearbeitet: (Ergänzung)
Code:
public JsonResult getString()
{
    var array = new[] {"s1", "s2", "s3"};
    return Json( array, JsonRequestBehavior.AllowGet );
}

Sollte so funktionieren.
 
Vielen Dank für die Denkanstöße.

Mit folgendem Code in der View klappt's:

Code:
<script type="text/javascript">
    function jsFunktion() {
        var zahl = document.getElementById("number").value;
        alert(zahl);
        var baseUrl = "Home/getString?test=";
        var url = baseUrl + zahl;
        $.ajax({
            url: url,
            type: 'POST',
            dataType: 'json',
            success: function (data) {
                alert(data);
                alert(data.length);
                alert(data[0]);
            }
        });
    }
</script>

@holy:
Dein Code hat auch geklappt. So wär' mir die Methode aber zu unflexibel, da ich mich beim Rückgabetyp schon konkret auf Json festlegen muss. Trotzdem danke. :)
 
mosquito87 schrieb:
@holy:
Dein Code hat auch geklappt. So wär' mir die Methode aber zu unflexibel, da ich mich beim Rückgabetyp schon konkret auf Json festlegen muss. Trotzdem danke. :)

Bin mir grad nicht zu 100% sicher, aber soweit ich weiß ist '$.ajax...' eine detailiertere Form von '$.getJSON' ;) Und beides verlangt nunmal ein JSON Result, der JS-Serializer macht aus deinem Array auch nichts anderes.
 
Zurück
Oben