为什么我的JSON字符串在MVC 4.5中的ajax帖子之后被截断?

时间:2015-10-22 15:43:20

标签: c# jquery json asp.net-mvc

在MVC 4.5的一个视图中,我有一个jquery函数,它对我的​​一个控制器方法执行ajax发布。我的数据已按字母顺序排列' JSON。出于某种原因,我的控制器方法总是将我的字符串长度限制为5325个字符。一旦将字符串发送到控制器,应用程序就会抛出错误,因为JSON字符串没有正确结束。

这是我的jquery函数:

$(function () {
        $button.click(function () {
            var selected = JSON.stringify($table.bootstrapTable('getSelections'));
            $.ajax({
                type: 'POST',
                url: '/Hub/downloadWorkspaces',
                data: 'selectedSpaces=' + selected,
                success: function () {
                    window.location = '/Hub/browserMultiDownload';
                }
            });
        });
    });

数据被发送到我的一个控制器方法,如下所示:

    [HttpPost]
    public void downloadWorkspaces(string selectedSpaces)
    {
        System.Diagnostics.Debug.WriteLine(selectedSpaces);
        JArray select = JArray.Parse(selectedSpaces);

        for (int i = 0; i < select.Count; i++)
        {
            string selectedTest = select[i]["Workspace ID"].ToString();
            Hub.Models.Query.getAllFiles(selectedTest);
        }
    }

由于某种原因,selectedSpaces字符串始终被截断。我该怎么做才能解决这个问题?

...,"_Workspace ID_data":{"field":"Workspace ID"},"name":"CM.02.0002.MASPA_Conditional    //No closing brace

2 个答案:

答案 0 :(得分:1)

试试这个演示:

$(function () {
        $button.click(function () {
              var json = {};
              json.id = '101';
              json.name = 'Name test';
            $.ajax({
                type: 'POST',
                url: '/Hub/downloadWorkspaces',
                data: JSON.stringify(json),
                success: function () {
                    window.location = '/Hub/browserMultiDownload';
                }
            });
        });
    });

在控制器中:

[HttpPost]
public void downloadWorkspaces(string id, string name)
{
    // id = 101, name = Name test
}

答案 1 :(得分:0)

您拥有的数据很可能包含&,用于分隔POST请求中的值:

data: "selectedSpaces=" + "{'a':'b&newKey'}", 

请求本身看起来如下,newKey'}被视为帖子中没有数据的另一个键:

selectedSpaces={'a':'b&newKey'}

修正:Url编码(即http://api.jquery.com/jQuery.param/)或作为对象发送:

data: {'selectedSpaces' : selected }

jQuery.ajax - sending data中查看更多信息。