使用jQuery将复杂的JSON对象发送到Asp.net MVC

Rob*_*nik 3 ajax jquery asp.net-mvc-2

我正在定义一个像这样的对象:

data = {
    first: { Id: 1, Name: "This is my first name." },
    second: { Id: 2, Name: "The second one." }
};
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用以下命令发出Ajax请求:

$.ajax({
    url: "/SomeURL"
    type: "POST",
    data: data,
    success: function(){ ... },
    error: function(){ ... }
});
Run Code Online (Sandbox Code Playgroud)

但是我的数据被转换成类似于Asp.net MVC默认模型绑定器无法掌握的结构的数组.

first[Id]=1&first[Name]=...
Run Code Online (Sandbox Code Playgroud)

我应该设置或执行什么,因此jQuery会正确地将这些转换为:

first.Id=1&first.Name=...
Run Code Online (Sandbox Code Playgroud)

Ric*_*ole 5

您是否尝试过扁平化数据?

data = {
    "first.Id": 1,
    "first.Name": "This is my first name.",
    "second.Id": 2,
    "second.Name": "The second one."
};
Run Code Online (Sandbox Code Playgroud)

这里有一个小的jQuery扩展来展平你的数据:

jQuery.flatten = function(data) {
    var flattenFunc = function(flattenedData, flattenFunc, name, value) {
        if (typeof(value) == 'object') {
            for (var item in value) {
                flattenFunc(flattenedData, flattenFunc, name ? name + '.' + item : item, value[item]);
            }
        }
        else {
            flattenedData[name] = value;
        }
    };

    var flattenedData = new Array();
    flattenFunc(flattenedData, flattenFunc, null, data);
    return flattenedData;
};
Run Code Online (Sandbox Code Playgroud)

只需更换data$.flatten(data)您的Ajax请求.