2012-02-13 54 views
2

我想發送一個對象數組到我的控制器,但有一些困難。MVC如何接收來自json的對象數組?

它正在發送數組,當傳遞給控制器​​時,數組的對象計數也似乎沒問題。 但是,如果你看對象的內部所有屬性的對象是null

如何可能?

JAVASCRIPT:

function callme(results) { 
     for (var i = 0; i < results.length; i++) { 
      var endRes = { 
       Id: results[i].id, 
       Icon: results[i].icon 
      }; 
      jsonObj.push(endRes); 
     } 
     sendPackage(jsonObj); 
} 

function sendPackage(jsonObj) { 
    $.ajax({ 
     type: "POST", 
     url: '../../Home/RegisterList', 
     data: { List: jsonObj }, 
     cache: false, 
     dataType: "json", 
     error: function (x, e, data) { 
       alert(data); 
     } 
    }); 
} 

控制器:

[HttpPost] 
public JsonResult RegisterList(ICollection<DetailsModel> List) 
{ 
    foreach (var i in List) ....... // other process will be here 
    ............................... // other process will be here 
    return Json(new { message = "OK" }); 
} 

MODEL:

public class DetailsModel 
{ 
    public string Id { get; set; } 
    public string Icon { get; set; } 
} 
+0

你確定結果[i] .id不是結果[i] .Id?給你的錯誤會有道理:會添加元素,但爲空值。 – peterfoldi 2012-02-13 17:12:53

+0

我相信,在發送之前,對象數組似乎還沒有正確的值。但不知何故,它沒有達到控制器。 – MrGorki 2012-02-14 10:20:49

+1

一個非常類似的問題在另一個問題有一個更簡單的答案 http://stackoverflow.com/questions/7116099/send-array-to-mvc-controller-via-json – Appetere 2012-09-21 17:14:09

回答

4

好的我昨晚通過使用牛頓的JSON.NET解決了這個問題(你可以從NuGet中獲得它)。我把數組串起來,並用控制器將它作爲字符串接收。最後我用json.net將這個字符串轉換(反序列化)爲一個集合。

要字符串化:使用相同的代碼但改變JSON請求的與所述數據部分:

data: { List : JSON.stringify(jsonObj) }

最後通過接受她:

using Newtonsoft.Json; 
public JsonResult RegisterList(string List) 
     { 
      ICollection<DetailsModel> jsonModel = JsonConvert.DeserializeObject<ICollection<DetailsModel>>(List); 
     } 

瞧;你有一個名爲jsonModel的集合!

3

不幸的是模型名單的結合是不是很好,並在顯着MVC。請參閱: http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

傳遞列表這樣工作的:

數據:{ 「列表[0] .ID」: 「1」, 「列表[0] .Icon」: 「測試」}

+0

它也不工作。 – MrGorki 2012-02-14 13:41:14

+0

現在這很奇怪,因爲我用你的代碼創建了一個項目,它重現了你的錯誤(數組的大小,但所有的值都是空的),然後將這1行更改爲我在這裏提供的硬編碼測試數據,現在它工作:))。因此,如果您有5分鐘的時間,您是否可以創建一個新項目,並顯示您在此顯示的唯一功能(頁面上的1個按鈕用於發送數據),並告訴我這是否對您無效? – peterfoldi 2012-02-14 14:21:01

+0

好的我昨晚通過使用牛頓的JSON.NET解決了這個問題。我將數組串起來並將其作爲字符串接收。最後,我用json.net將這個字符串轉換成一個列表。謝謝你花費你寶貴的時間給我:)真的很感激它 – MrGorki 2012-02-15 11:59:27