【问题标题】:MVC How to receive an object array that comes from JSON?MVC 如何接收来自 JSON 的对象数组?
【发布时间】:2012-02-13 17:07:02
【问题描述】:

我正在尝试向我的控制器发送一个对象数组,但遇到了一些困难。

它正在发送数组,当传递给控制器​​时,数组的对象计数似乎也可以。 但是,如果您查看对象内部,则对象的所有属性都是null

这怎么可能?

JavaScript:

function callme(results) {
        for (var i = 0; i < results.length; i++) {
            var endRes = {
                Id: results[i].id,
                Icon: results[i].icon
            };
            jsonObj.push(endRes);
        }
        sendPackage(jsonObj);
}

function sendPackage(jsonObj) {
    $.ajax({
        type: "POST",
        url: '../../Home/RegisterList',
        data: { List: jsonObj },
        cache: false,
        dataType: "json",
        error: function (x, e, data) {
                alert(data);
        }
    });
}

控制器:

[HttpPost]
public JsonResult RegisterList(ICollection<DetailsModel> List)
{
    foreach (var i in List) ....... // other process will be here
    ............................... // other process will be here
    return Json(new { message = "OK" });
}

型号:

public class DetailsModel
{
    public string Id { get; set; }
    public string Icon { get; set; }
}

【问题讨论】:

  • 您确定 results[i].id 不是 results[i].Id 吗?考虑到您的错误,这将是有意义的:将添加元素但具有空值。
  • 我敢肯定,对象数组在发送前似乎也可以使用正确的值。但不知何故,它没有到达控制器。
  • 一个非常相似的问题在另一个问题stackoverflow.com/questions/7116099/…有一个简单得多的答案@

标签: javascript json object asp.net-mvc


【解决方案1】:

好的,我昨晚使用 Newton 的 JSON.NET 解决了这个问题(您可以从 NuGet 获得它)。我已经对数组进行了字符串化,并通过控制器将其作为字符串接收。最后我使用 json.net 将这个字符串转换(反序列化)为一个集合。

要字符串化:使用相同的代码,但更改 json 请求的数据部分:

data: { List : JSON.stringify(jsonObj) }

终于收到了:

using Newtonsoft.Json;
public JsonResult RegisterList(string List)
        {
            ICollection<DetailsModel> jsonModel = JsonConvert.DeserializeObject<ICollection<DetailsModel>>(List);
        }

然后瞧;你有一个名为 jsonModel 的集合!

【讨论】:

    【解决方案2】:

    不幸的是,列表的模型绑定在 MVC 中并不那么好和明显。看: http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

    以这种方式传递列表有效:

    数据:{"List[0].Id":"1", "List[0].Icon":"test"}

    【讨论】:

    • 现在这很奇怪,因为我使用您的代码创建了一个项目,该项目重现了您的错误(数组已调整大小但所有值均为空)然后将这一行更改为我在此处提供的硬编码测试数据它现在可以工作了(对我来说:))。因此,如果您有 5 分钟的时间,您能否创建一个具有您在此处展示的唯一功能(页面上的 1 个按钮用于发送数据)的新项目,并让我知道这是否对您也不起作用?
    • 好的,我昨晚使用 Newton 的 JSON.NET 解决了这个问题。我已经对数组进行了字符串化并将其作为字符串接收。最后,我使用 json.net 将此字符串转换为列表。感谢您为我花费宝贵的时间:) 真的很感激
    猜你喜欢
    • 2022-01-02
    • 1970-01-01
    • 2016-09-04
    • 2019-12-14
    • 1970-01-01
    • 2019-02-07
    • 2019-11-20
    • 2017-05-18
    • 1970-01-01
    相关资源
    最近更新 更多