gpt4 book ai didi

c# - 为什么 modelbinder 在 ASP.NET MVC4 中为我的列表实例化空对象?

转载 作者:行者123 更新时间:2023-11-30 20:56:12 25 4
gpt4 key购买 nike

我有一个像这样的 json 对象:

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 Controller 操作时,将分配非列表属性。但是,translations 数组只有两个空对象(已实例化,但具有空/默认属性值)。这是我的 Controller 操作方法和我的模型:

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“array”出于某种原因被编码(也许这是正确的,不确定).如果我尝试 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篡改。

这可能是什么问题?

最佳答案

您应该指定内容类型 (json) 并使用 JSON.stringify 将其字符串化

$.ajax({
url: "items/update",
dataType: "json",
contentType: "application/json; charset=utf-8;",
type: "POST",
data: itemData,
data: JSON.stringify(itemData),
});

另一件事是使用添加一个 JsonValueProviderFactory:

ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());

Global.asax 中的 Application_Start 方法中

article可能对你有帮助。

关于c# - 为什么 modelbinder 在 ASP.NET MVC4 中为我的列表实例化空对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17678673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com