如何在动作方法中传递数组对象?

时间:2011-09-20 11:44:03

标签: arrays json jqgrid

我在方法$.toJSON(batch)中遇到错误,该对象不支持此属性或方法。如何使用$.toJASON(batch)方法传递批处理数组?

$.ajax({
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            url: '@Url.Action("BatchUpdate", "Home")',
            dataType: 'json',
            //data: '{viewModelsBatch: '+batch+'}',
            data: $.toJSON(batch),
            success: function(result) {
              //...
              $('#jqgProducts').trigger('reloadGrid');
            }
    });

2 个答案:

答案 0 :(得分:1)

我同意Paul Grime的观点,json2.jsJSON.stringify的使用效果优于toJSON jQuery插件。原因是在大多数网络浏览器中都实现了JSON.stringify 原生。您应该包括json2.js,以确保如果网络浏览器不支持JSON.stringify,则将使用JavaScript中的实现。典型的jQuery插件是另一端的纯JavaScript代码。因此序列化将慢慢。此外,json2.js的作者是道格拉斯·克罗克福德(Douglas Crockford),他是JSON标准的作者,也是着名的JavaScript语言专家。所以他在JavaScript中实现JSON序列化确实是最好的。

您的主要问题是另一个问题:为什么data: $.toJSON(batch)data: JSON.stringify(batch)在您的代码中不起作用。问题不是jqGrid问题,而是纯服务器端问题。您没有在服务器端编写您使用的技术。代码看起来像ASP.NET MVC代码,但不清楚您使用的是哪个版本的ASP.NET MVC 。如果您使用的是3.0版本,它应该会自动运行,但如果是2.0版本,您需要注册自定义JsonValueProviderFactory(请参阅here)。

答案 1 :(得分:0)

我不知道toJSON功能是什么,所以我建议你阅读这个答案。

Serializing to JSON in jQuery