【问题标题】:How to post JSON data to Action Method ?如何将 JSON 数据发布到 Action Method ?
【发布时间】:2013-04-03 17:23:04
【问题描述】:

我正在向服务器 (.Net) 发布信息,但在将数组传递给控制器​​操作时遇到问题。我已经尝试了几乎所有可能的组合,但没有任何运气。然而,其中之一让我感到困惑。

如果我执行此请求:

var dataArray = [ { /* some plain object */ }, { /* another plain object */ ], ... ];

$.ajax(url, {
   type: "post",
   data: { models: dataArray }
});

产生一个请求数据发送之类的

models[0][property1]:value1
models[0][property2]:value2
...
models[1][property1]:value3
models[0][property2]:value4
...

不幸的是,.Net MVC4 无法理解该请求。在相关的SO question 之后,我尝试过traditional: true,但发送到服务器的请求如下所示:

models:[object Object]

显然,它发送的不是对象,而是字符串"[object Object]"。 ……这有什么问题?我是否注定要为每个涉及非原始参数的请求发送序列化字符串(并且必须在服务器端手动反序列化它们)?

注意:这是我的操作方法。至于现在,我尝试的所有结果都是

  1. 参数是一个大小正确的数组,但每一项都是一个新的未修改(空)对象或
  2. 参数为空

    [HttpPost]
    public ActionResult UpdateModels(Models.SimpleModel[] models)
    

【问题讨论】:

    标签: jquery .net asp.net-mvc-4


    【解决方案1】:

    示例 JQuery

    var MyConnectionList = {
        ColorList: []
    };
    
    function SendStream() {
        MyConnectionList.ColorList.push({
            "Name": 'Test1',
            "Color": 'red'
        });
    
        MyConnectionList.ColorList.push({
            "Name": 'Test2',
            "Color": 'Green'
        });
    
        $.ajax({
            url: url,
            data: JSON.stringify(MyConnectionList),
            async: true,
            type: 'POST',
            beforeSend: function (xhr, opts) {
            },
            contentType: 'application/json; charset=utf-8',
            complete: function () {  },
            success: function (data) {
            }
        });
    }
    

    样品控制器

    public ActionResult SendStream(List<Sample> ColorList)
    {
        return null;
    }
    

    【讨论】:

    • 不错! JSON.stringify(object)contentType: 'application/json; charset=utf-8' 解决了这个问题!我现在可以很好地接受我的论点了!谢谢!
    【解决方案2】:

    尝试将JSON.stringify 用于JSON.stringify(dataArray) 之类的数组

    更新

    如果我们在使用 ajax 调用时使用 stringify,MVC3 会自动将字符串数据转换为 .NET 对象。我认为 MVC4 也应该如此。

    更新 2
    将 contentType 属性设置为 application/json;字符集=utf-8

    【讨论】:

    • 我试过了,除非我手动反序列化字符串(所以我需要接收一个字符串,而不是 IEnumerable&lt;&gt; 或我的对象数组)。我想知道 .Net MVC4 如何接受我发送的内容而不是这样的混蛋
    • 是的,但是如果没有明确设置 contentType,MVC4 就不能理解 JSON 数据。
    猜你喜欢
    • 2013-11-03
    • 2014-12-17
    • 1970-01-01
    • 2012-06-21
    • 2013-08-27
    • 2016-06-05
    • 1970-01-01
    • 2023-01-29
    • 1970-01-01
    相关资源
    最近更新 更多