2012-02-21 50 views
0

我知道在論壇上還存在其他問題,但發現了有用的解決方案。 我有這樣定義的控制器:將數組從Ext.Net存儲到ASP.NET MVC

[HttpPost] 
    public ActionResult Update(int id, IList<MyObject> data) 
    { 
     return Json(new { success = false, message = "saved!" }); 
    } 

MyObject JSON數組是JsonStore內側和submitData()函數調用發送起來。我可以看到一切都正確發送,「數據」參數是一個MyObject的數組,如果我手動做JSON.Deserialize<IList<MyObject>>(data)我得到正是我所需要的,這意味着數據是一個有效的JSON字符串...在頭我可以看到「application/json」內容類型。 我已經使用JsonValueProviderFactory,但它沒有幫助。從我的理解看來,價值提供者似乎應該很容易將數組映射到IList中,所以我想知道如果我做錯了什麼...

謝謝!

UPDATE 作爲一個評論指出我有一個稍微不同的使用情景:我其實通過Store.submitData()調用發佈此數據...很顯然,即使頭是相似的,商店提交不起作用,因爲它實際上會生成一個字符串。

有沒有人有任何關於如何強迫商店做類似於JSON.stringify的知識?

回答

1

您還沒有表現出你的客戶端代碼,但應以下罰款工作:

Ext.Ajax.request({ 
    url: '@Url.Action("update", new { id = "123" })', 
    method: 'POST', 
    headers: { 'Content-Type': 'application/json' }, 
    params: JSON.stringify({ 
     data: [ 
      { foo: 'value 1' }, 
      { foo: 'value 2' }, 
      { foo: 'value 3' } 
     ] 
    }), 
    success: function (response) { 
     alert(response.responseText); 
    } 
}); 

它假定MyObject這樣定義:

public class MyObject 
{ 
    public string Foo { get; set; } 
} 

但當然也可能是隨便什麼複雜的對象。

+0

酷,這正是需要的。需要指出的是,即使沒有JsonValueProvider,它也可以工作。 作爲一個方面說明,我實際上並沒有通過Store.submitData()調用發佈該數據,而是通過Store.submitData()調用...顯然,即使標頭相似,商店提交也不起作用,因爲它實際上會生成串。 有沒有人有任何關於如何強迫商店做類似於JSON.stringify的知識? – Tallmaris 2012-02-21 14:12:14

+0

@Tallmaris,JsonValueProvider內置ASP.NET MVC 3.這就是它工作的原因。如果您不寫自定義值提供程序,這將永遠不會在ASP.NET MVC 2中工作。 – 2012-02-21 14:13:21