在一個MVC控制器的POST中,我使用JQuery發送一個具有兩個屬性的JSON對象:Id和Foos。出於某種原因,每個FooModel實例的所有屬性都是空/空的。asp.net mvc json解串器不工作
這裏的方法:
[HttpPost]
public ActionResult EditFoo(int Id, FooModel[] foos)
這是我的小提琴手,獲取表單參數(我可以證實,該數據被傳遞到服務器)。我還用兩個調試器驗證了JSON對象包含所有正確的值。
Id 17934
Foos[0][Label] My Foo
Foos[0][Bars][0][Label] First Bar
Foos[0][Bars][0][Id] 1
Foos[0][Bars][1][Label] Second Bar
Foos[0][Bars][1][Id] 2
FooModel看起來像這樣:
public class FooModel
{
public string Label { get; set; }
public IList<Bar> Bars { get; set; }
}
在EditFoo方法,我可以看到的富項目的權限編號的數組(在該例子中,1)。但是,每個FooModel實例中的所有屬性都是空/空的。
編輯1:
爲了澄清:我不是手工創建表單參數。我通過ajaxArgs.data傳遞一個真正的JSON對象回到$ .ajax()。
表單數據本身看起來像這樣:
Id=17934&Foos%5B0%5D%5BId%5D=1&&Foos%5B0%5D%5BLabel%5D=My+Foo...
我不能找到一個快速的方式來獲得JSON本身作爲一個字符串,但是這是分配給ajaxArgs.data(該FOOS變量其所有屬性):
var data = { Id: Model.Id, Foos: Model.Foos };
編輯2:
我使用JavaScriptSerializer創建低於喜歡的字符串:
public static string ToJson(this object obj)
{
var serializer = new JavaScriptSerializer();
var foo = serializer.Serialize(obj);
return foo;
}
,然後讓模型在這樣的視圖可用於JavaScript:
<script type="text/javascript">
var Model = <%= Model.ToJson() %>;
</script>
這就是Fiddler如何表示參數。我會得到一個JSON示例 – 2011-02-10 21:50:14
@c_bit,是的,我確信這就是Fiddler代表他們的方式,但也是因爲這是他們被傳送過來的方式。 jQuery允許您使用各種機制通過AJAX發送數據,包括POST *和* JSON兩種形式。您明確使用表單POST變體,並且對於ASP.NET MVC模型聯編程序,名稱/值對的**名稱**部分格式不正確。 – 2011-02-10 21:52:08