我有一個JSON對象是這樣的:爲什麼modelbinder在ASP.NET MVC4中爲我的列表實例化空對象?
var itemData = {
"translations":[
{
"value":"Byron",
"languageId":1
},
{
"value":"hgfdfghds",
"languageId":3
}
],
"itemId":204,
"itemCategoryId":44
};
,我又把它使用jQuery像這樣的職位:
$.ajax({
url: "items/update",
dataType: "json",
type: "POST",
data: itemData,
});
當呼叫到達我的ASP.NET MVC4控制器動作,非列表屬性被分配。但是,translations
數組只有兩個空對象(實例化,但具有空值/默認屬性值)。這裏是我的控制器的操作方法和我的模型:
public JsonResult Update(UpdateItemModel model)
{
if(model.Translations[0].Value!="Byron")
{
throw new Exception("That translation's value should have been populated with 'Byron'.");
}
return Json("ok");
}
public class UpdateItemModel
{
public List<TranslationModel> Translations { get; set; }
public int ItemId { get; set; }
public int ItemCategoryId { get; set; }
}
public class TranslationModel
{
public string Value { get; set; }
public int LanguageId { get; set; }
}
如果我在即時窗口看Request.Form
,我可以看到translations
「陣列」編碼某種原因(也許這是正確的,不知道)。如果我嘗試Request.Form["translations"]
,我會得到null
。下面是我看到的原始表單數據的例子:
{translations%5b0%5d%5bvalue%5d=Byron&translations%5b0%5d%5blanguageId%5d=1&translations%5b1%5d%5bvalue%5d=hgfdfghds&translations%5b1%5d%5blanguageId%5d=3&itemId=204&itemCategoryId=44}
不知道如果我的問題有什麼用了JSON「編碼」在那個字符串的開頭。我在Fiddler看着它,看到了同樣的事情,所以我不能責怪ASP.NET篡改。
這裏有什麼問題?
該問題已修復,但未添加jsonValueProviderFactory。內容類型和數據串化是訣竅。謝謝! –
很高興我幫了忙。乾杯。 – LeftyX