使用JSON发布一个复杂对象数组,MVC模型是不绑定的

时间:2017-03-16 13:47:21

标签: arrays json asp.net-mvc model-binding

这是我的代码。

json_model

var mix = {
        MixName: $("#mixname").val(),
        MixDesc: tinyMCE.activeEditor.getContent(),
        Price: $("#price").val(),
        DiseaseMixs: [],
        MixProducts: []
    }

将项目添加到DiseaseMixs和MixProducts

$("#DiseaseList").find("tbody tr").each(function (index) {
        mix.DiseaseMixs.push({
            MixID: parseInt(MixID),
            DiseaseID: parseInt($(".diseaseid").eq(index).html()),
            ImpactDegree: parseInt($(".derece option:selected").eq(index).html()),
            Description: $(".diseaseMixDesc input").eq(index).val()
        });
    })
    $("#productList").find("tbody tr").each(function (index) {
        mix.MixProducts.push({
            MixID: parseInt(MixID),
            ProductID: parseInt($(".productid").eq(index).html()),
            MeasureTypeID: parseInt($(".birim option:selected").eq(index).val()),
            MeasureAmount: $(".measureAmount input").eq(index).val()
        });
    })

并且在此过程结束时,这是一个发布的示例json对象。

{
"MixName": "asdasddas",
"MixDesc": "<p>sadasd</p>",
"Price": "123",
"DiseaseMixs": [{
    "MixID": 1,
    "DiseaseID": 2,
    "ImpactDegree": 5,
    "Description": "asads"
}, {
    "MixID": 1,
    "DiseaseID": 3,
    "ImpactDegree": 4,
    "Description": "aqqq"
}],
"MixProducts": [{
    "MixID": 1,
    "ProductID": 2,
    "MeasureTypeID": 3,
    "MeasureAmount": "3"
}, {
    "MixID": 1,
    "ProductID": 3,
    "MeasureTypeID": 2,
    "MeasureAmount": "45"
}]
}

ajax post

$.ajax({
        url: 'SaveMix',
        type: 'POST',
        data: JSON.stringify(mix),
        contentType: 'application/json; charset=utf-8',
        success: function (result) {
            console.log(result);
        },
        error: function (xhr, status) {
            alert(status);
            console.log(xhr);
        }


    })

和MVC Model和JSONResult函数

模型

public class MixModel
{
    public string MixName { get; set; }
    public string MixDesc { get; set; }
    public float Price { get; set; }
    DiseaseMix[] DiseaseMixs { get; set; } //DiseaseMix EntityFramework entity
    MixProduct[] MixProducts { get; set; } //MixProduct EF

}

功能

[HttpPost]
    public JsonResult SaveMix(MixModel mix)
    {
        bool result = false;
        //do something

        return Json(new { result = result }, JsonRequestBehavior.AllowGet);
    }

这是我得到的结果。

enter image description here

无论我如何尝试,我都无法绑定模型。

我做错了什么?请给我一些帮助。

提前致谢。

1 个答案:

答案 0 :(得分:0)

模型绑定失败,因为这两个属性当前是private(当您未明确指定任何内容时,这是默认值)。

将2个属性更改为public,以便模型绑定器可以设置这些属性的值。

public class MixModel
{
    public string MixName { get; set; }
    public string MixDesc { get; set; }
    public float Price { get; set; }
    public DiseaseMix[] DiseaseMixs { get; set; } //DiseaseMix EntityFramework entity
    public MixProduct[] MixProducts { get; set; } //MixProduct EF

}

我还建议不要将您的视图模型与ORM生成的实体混合在一起。这创造了一个紧密耦合的解决方案。