MVC 4 ApiController操作上的空参数

时间:2013-03-11 15:23:27

标签: jquery asp.net-mvc asp.net-web-api

我将一个字符串集合的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);
                }
            }
        });
    };

My ApiController Post Action

    // 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();
        }
    }

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

将数组作为jQuery的post参数传递的可能(也是最常见)问题之一被描述为here

简短版本:

添加

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'功能'。