【问题标题】:.NET MVC Databind JSON Object with Array of Objects.NET MVC 数据绑定 JSON 对象与对象数组
【发布时间】:2017-06-20 20:36:58
【问题描述】:

我需要数据绑定一个 JSON 对象,其中接收模型具有另一个模型的列表。示例:

public class User
{
    public string FirstName;
    public string LastName;
    public List<Friend> Friends;
}

朋友等级:

public class Friend
{
    public string NickName;
    public string FirstMetLocation;
}

我需要构建一个 JSON 对象,在我调用操作时将数据绑定到用户模型。

我构建 JSON 对象的方式是这样的:

var friends = [];
// iterate over something and add friend object to array
friends.push({
    NickName: 'Bongos',
    FirstMetLocation: 'That place'
});

var user = {
    FirstName: 'Joe',
    LastName: 'Somebody',
    Friends: friends
};

最终生成 JSON 如下:

{"FirstName":"Joe","LastName":"Somebody","Friends":[{"NickName":"Bongos","FirstMetLocation":"That place"}]}

然后我通过 AJAX POST 将其传递给我的操作:

$.ajax({
    type: 'POST',
    url: url,
    dataType: 'json',
    data: user,
    success: function (event) {
        // do something
    },
    error: function (xhr, status, error) {
        alert("You didn't do it right.");
    }
});

当它开始行动时,用户对象将获取FirstNameLastName 属性,但List&lt;Friend&gt; 为空。当我将其剥离为仅传入 List&lt;Friend&gt; 时,它工作正常。 JSON 看起来像这样:

{"Friends":[{"NickName":"Bongos","FirstMetLocation":"That place"}]}

我错过了什么吗?

【问题讨论】:

    标签: c# asp.net json asp.net-mvc data-binding


    【解决方案1】:

    由于是复杂对象,指定内容类型为application/json,数据以字符串化的json字符串形式发送。

    $.ajax({
        type: 'POST',
        url: url,
        contentType: 'application/json',
        data: JSON.stringify(user),
        success: function (event) {
            // do something
        },
        error: function (xhr, status, error) {
            alert("You didn't do it right.");
        }
    });
    

    现在模型绑定器将能够将从 ajax 调用发送的数据映射到相应的属性

    还假设您的属性是settable。

    public class User
    {
        public string FirstName { set; get; }
        public string LastName { set; get; }
        public List<Friend> Friends { set; get; }
    }
    
    public class Friend
    {
        public string NickName { set; get; }
        public string FirstMetLocation { set; get; }
    }
    

    【讨论】:

    • 感谢您的回复!我会尽快尝试一下。我的属性是可设置的。模型绑定器无法按照我的方式处理复杂对象是否有原因?
    猜你喜欢
    • 2016-10-23
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 2013-11-14
    相关资源
    最近更新 更多