0

我有一个这样的对象:

var lot = { ID: 0, ... //various other attributes
            SchemeInstanceList: [] }

创建后,我用另一个结构的对象填充 SchemeInstanceList 属性,如下所示:

lot.SchemeInstanceList.push({ ID: 0, LotID: 0, SchemeID: 18, LotPosition: 0})

到这里为止,一切都很好。现在我将批次对象发送到我的 ActionMethod,创建一个数据库条目。

$.ajax({
    url: "/Lots/CreateSchemes",
    data: lot
});

public ActionResult CreateSchemes(LotModel lot) {
    ... //store lot in database
}

ActionMethod 被调用并且lot 的值是正确的,SchemeInstanceList 中有条目。然而,所有这些条目的属性都为零,我看不出我做错了什么。

当我传递单个列表元素本身时,条目会正确显示:

$.ajax({
    url: "/Lots/CreateScheme",
    data: lot.SchemeInstanceList[0]
}

public ActionResult CreateScheme(SchemeInstanceModel scheme) {
   ... //do whatever
}

现在 SchemeID 的值是 18 而不是 0。

为什么这不起作用?我错过了什么最明显的事情?

编辑:这是我的模型:

public class LotModel {
    public int ID { get; set; }
    ... //various other properties
    public List<SchemeInstanceModel> SchemeInstanceList { get; set; }
}

public class SchemeInstanceModel
{
    public int ID { get; set; }
    public int LotID { get; set; }
    public int SchemeID { get; set; }
    public int LotPosition { get; set; }

    //public List<AttributeInstanceModel> AttributeInstanceList { get; set; }
}
4

2 回答 2

0

在这里找到解决方案:

https://stackoverflow.com/a/5373956/2139555

为了使复杂对象的 json 绑定起作用,需要JSON.stringify(lot)他的 data 和 set contentType: "application/json, charset=utf-8"。我也没有设置type: "Post",但我试过了,但我做的时候没有用。此外,我得到了很多数据,所以我认为这无关紧要。

完整的工作json:

$.ajax({
    url: "/Lots/CreateSchemes",
    data: JSON.stringify(lot),
    type: "Post",
    dataType: "application/json, charset=utf-8"
});
于 2013-03-21T11:45:29.450 回答
0

尝试这个:

public ActionResult CreateSchemes(string lot) {
    LotModel li = JsonConvert.DeserializeObject<LotModel>(lot);
    ... //store lot in database
}

检查该字符串是否包含您想要的值...

还要确保您的 LotModel 具有 List 属性。

我的猜测是,如果值在传入的字符串中,那么您的 javascript LotModel 与您的 C# LotModel 不匹配。请记住,javascript 中的模型属性名称必须与 C# 中的模型属性名称完全相同,大写字母等等。

于 2013-03-20T19:44:46.160 回答