2012-04-12 14 views
1

我想知道浩在通過一個jquery Ajax調用傳遞asp.net MVC3控制器陣列迭代與陣列工作的jQuery傳遞給ActionController的asp.net MVC 3

我的Ajax調用:

   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); 
        } 
       }); 

這是我的ActionController:

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

    } 

其實,我可以傳遞一個數組ActionController像我在ActionControllerCreateFolder我正在獲得thod object object

謝謝

回答

2

不是一個簡單的事情要做,但這是一個辦法。首先改變你的AJAX方法是:

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

然後在控制器,你需要使用JavascriptSerializer類反序列化JSON的。在我的示例中,我使用了一個名爲folder的類,它在控制器代碼下面標出。你不必使用這種類型,如果你想在其他地方傳遞和使用它,它看起來更清晰。執行以下操作的控制器:

[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(""); 
    } 

這裏是我上面使用的Folder類型,與採用新的文件夾構造沿:

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

嗨,似乎是非常好的解決方案,從我所放的jQuery代碼中區分出JSON.stringify(),當我們從jquery傳遞json類型數據時,我們是否需要總是以JSON.stringify()類型傳遞?,我看過的一些代碼沒有它將json數據傳遞給actioncontroller,我們是否每次都必須指定它? – dtjmsy 2012-04-13 21:34:12

+0

我在我的Ajax調用中指定了數據類型:json,這是唯一的區別(我錯過了Ajax調用中的緩存行,但您可以添加它並沒有什麼區別)。我只使用json.stringify,因爲在這個例子中我們使用的是JavaScript數組:) – mattytommo 2012-04-14 09:20:25

相關問題