次のようなjsonオブジェクトがあります。
var itemData = {
"translations":[
{
"value":"Byron",
"languageId":1
},
{
"value":"hgfdfghds",
"languageId":3
}
],
"itemId":204,
"itemCategoryId":44
};
そして、次のように jQuery を使用して POST します。
$.ajax({
url: "items/update",
dataType: "json",
type: "POST",
data: itemData,
});
呼び出しが ASP.NET MVC4 コントローラー アクションに到達すると、リスト以外のプロパティが割り当てられます。ただし、translations
配列には 2 つの空のオブジェクトしかありません (インスタンス化されていますが、null/既定のプロパティ値があります)。これが私のコントローラーアクションメソッドと私のモデルです:
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 を改ざんのせいにすることはできません。
ここで何が問題になる可能性がありますか?