2

我正在将一个字符串集合的 Javascript 数组传递给我的 apicontroller 上的一个 post 操作,有一个数据正在发送(我通过 fiddler 知道这一点)但是当我调试时它似乎并没有真正到达控制器操作代码。我的代码如下,任何帮助将不胜感激。

编辑:为了澄清起见,调用了控制器操作,但是当有一个列表传递给它时,List stuffsId 的计数为零

Ajax/Javascript

my.sendStuffToController = function (stuffIds, completedHandler) {

        $.ajax({
            dataType: 'json',
            type: 'POST',
            url: my.stuffUrl,
            data: {
                stuffIds: stuffIds
            },
            success: function (data) {

                if (completedHandler !== undefined) {
                    completedHandler(stuffIds);
                }
            }
        });
    };

我的 ApiController 发布操作

    // Post 
    public void PostAsync(List<string> stuffIds)
    {
        var clientProxy = this.proxyFactory.CreateClientProxy(Tokens.EndPoint);
        var clientChannel = clientProxy.GetClientChannel();

        try
        {
            clientChannel.DoStuffAsync(stuffIds);
        }
        finally
        {
            clientProxy.TryCloseAbortClientChannel();
        }
    }
4

2 回答 2

1

dataType用于指定请求的返回类型。 contentType是您应该用来告诉服务器您要发送的内容。

于 2013-03-11T16:19:23.897 回答
0

此处描述了从 jQuery 将数组作为 post 参数传递的可能(也是最常见的)问题之一。

简洁版本:

添加

jQuery.ajaxSettings.traditional = true;

在你的 jQuery ajax() 函数调用之前,即

jQuery.ajaxSettings.traditional = true;
my.sendStuffToController = function (stuffIds, completedHandler) {

        $.ajax({
            dataType: 'json',
            type: 'POST',
            url: my.stuffUrl,
            data: {
                stuffIds: stuffIds
            },
            success: function (data) {

                if (completedHandler !== undefined) {
                    completedHandler(stuffIds);
                }
            }
        });
    };

长版:

从某个时间点开始,如果变量是数组,jQuery 开始将方括号附加到变量名,即在您的情况下,它将通过 ajax 调用传输 'stuffIds[]:value1 stuffIds[]:value2' 等。ASP.NET MVC 不喜欢这样并且拒绝接受这样的参数。jQuery.ajaxSettings.traditional = true关闭这个 jQuery 的“功能”。

于 2013-03-11T15:33:17.067 回答