2012-04-12 5 views
1

Action würde Ich mag ho wissen, in asp.net MVC3 Controller-Array von einem Jquery Ajax-AufrufArbeit mit Array von jquery weitergegeben asp.net Mvc 3

Mein Ajax-Aufruf übergeben iterieren:

   var array = []; 
       array.push({ dir: id }); 
       array.push({ dirToCreate: $("#txtDir").val() }); 

       $.ajax({ 
        Type: 'GET', 
        url: '/Home/CreateFolder/', 
        data: { 'list': array }, 
        traditional: true, 
        cache: 'true', 
        success: function (result) { 
         alert(result); 
        } 
       }); 

Und das ist meine Action:

public ActionResult CreateFolder (IEnumerable<string> list ) 
    { 
     // how to iterate through the values passed 
     return Content("ok"); 

    } 

Eigentlich kann passiere ich ein Array ActionController so wie ich in den ActionControllerCreateFolder mich am Erhalt thod object object?

dank

Antwort

2

keine straight forward, was zu tun, aber hier ist eine Möglichkeit, es zu tun. Zuerst Ihre Ajax-Methode ändern sein:

$.ajax({ 
     type: 'post', 
     datatype: 'json', 
     url: '/Home/CreateFolder', 
     traditional: true, 
     data: { list: JSON.stringify(array)}, 
     success: function (result) { 
      alert(result); 
     } 
    }); 

dann im Controller müssen Sie die Json mit der JavascriptSerializer Klasse deserialisieren. In meinem Beispiel habe ich eine Klasse namens Ordner verwendet, die unterhalb des Controller-Codes notiert ist. Sie müssen diesen Typ nicht verwenden, es schien einfach sauberer zu sein, wenn Sie es weitergeben und anderswo verwenden wollten. Führen Sie die folgenden in der Steuerung:

[HttpPost] 
    public ActionResult CreateFolder(string list) 
    { 
     var js = new JavaScriptSerializer(); 
     var deserializedObject = (object[])js.DeserializeObject(list); 
     var myFolders = new List<Folder>(); 

     if (deserializedObject != null) 
     { 
      foreach (Dictionary<string, object> newFolder in deserializedObject) 
      { 
       myFolders.Add(new Folder(newFolder)); 
      } 
     } 

     return Json(""); 
    } 

Hier ist die Folder Art, die ich oben verwendet haben, zusammen mit dem Konstruktor, der den neuen Ordner nimmt:

public class Folder 
{ 
    public Folder(Dictionary<string, object> newFolder) 
    { 
     if (newFolder.ContainsKey("dir")) 
     { 
      Directory = (string)newFolder["dir"]; 
     } 
     if (newFolder.ContainsKey("dirToCreate")) 
     { 
      DirectoryToCreate = (string)newFolder["dirToCreate"]; 
     } 
    } 
    public string Directory { get; set; } 
    public string DirectoryToCreate { get; set; } 
} 
+0

Hallo, sehr gute Lösung zu sein scheint, Was unterscheidet den jquery-Code von dem, was ich geschrieben habe, ist JSON.stringify(). Wenn wir einen json-Typ von jQuery übergeben, müssen wir immer einen JSON.stringify() -Typ übergeben, einen Teil des Codes, den ich gesehen habe hat es nicht zur Weitergabe von JSON-Daten an ActionController, sollten wir es jedes Mal spezifizieren müssen? – dtjmsy

+0

Ich habe den Datentyp angegeben: Json in meinem Ajax-Aufruf, das ist der einzige Unterschied (ich verpasste die Cache-Zeile in der Ajax-Aufruf, aber Sie können das hinzufügen, macht keinen Unterschied). Ich benutze nur json.stringify, weil wir in diesem Fall ein JavaScript-Array verwenden :) – mattytommo