嵌套的JSON对象未映射到服务器端Object

时间:2016-01-27 16:49:42

标签: asp.net-mvc vb.net

我正在尝试使用AJAX调用将JSON字符串发送到控制器。除了JSON字符串中的嵌套对象没有映射到控制器端的嵌套对象之外,一切似乎都正常工作。这是我的代码示例。

Class MyClass1{
    string prop1;
    string prop2;
    string prop3;
    MyClass2 prop4;
}

Class MyClass2{
    string prop5;
    string prop6;
    string prop7;
}

这就是我试图映射的方式。

$("#btnSave").click(function () {
            $.ajax({
                type: 'POST',
                url: '@Url.Action("Member", "Application")',
                data: { applicantModel:getAppData(), buttonText: $("#btnSave").val(), isDeleted: $("#hdnDeleted").val() },
                dataType: "json",
                success: function (data) {

                },
                error: function (xhr, ajaxOptions, error) {

                }
            });
        })

getAppData = function () {
        var fields = {
    "prop1": "a",
    "prop2": "b",
    "prop3": "c",
    "prop4":{
        "prop5": "d",
        "prop6": "e",
        "prop7": "f"
        }
    }

    return fields;
}

和我的控制器方法......

<HttpPost()>
    Function Member(applicantModel As ApplicantModels, buttonText as String, isDeleted as String) As ActionResult
       //do some stuff with the data
       Return View(applicantModel)
    End Function

当我在控制器内部时,我的MyClass1对象被正确映射但是prop4数据没有被映射。我已尝试过其他线程的几个想法,我已经尝试过JSON.Stringify()JSON,然后在Ajax调用中发送它。我完全没有想法。会爱一些帮助!

提前致谢!

1 个答案:

答案 0 :(得分:2)

您需要使用publicset访问者创建视图模型属性get,以便DefaultModel活页夹可以从发布的表单数据中设置这些属性的值。

public class MyClass1
{
    public string prop1 { get; set; }
    public string prop2 { get; set; }
    public string prop3 { get; set; }
    public MyClass2 prop4 { get; set; }
}

public class MyClass2
{
    public string prop5 { get; set; }
    public string prop6 { get; set; }
    public string prop7{ get; set; }
}

通过此更改,您的代码应该可以正常工作。