在get和post模式下,DefaultModelBinder与jquery ajax的行为不同

时间:2017-01-10 02:24:18

标签: ajax asp.net-mvc datatables

有什么我想念的吗? 在$ .ajax' get'和'发布'请求,.net mvc modelbinder无法在get请求中正确绑定complexType,但在post请求中正确绑定。

public class GridQuery
{
    public GridQuery()
    {
        Draw = 1;
        Start = 0;
        Length = 10;
    }

    public int Draw { get; set; }
    public int Start { get; set; }
    public int Length { get; set; }
    public GridSearch Search { get; set; }
}

public class GridSearch
{
    public string Value { get; set; }

    public string Regex { get; set; }
}

然后是ajax请求代码

$.ajax({
    url: 'DataGrid/GetData',
    type: 'get',
    data: {
        start: 0,
        draw: 10,
        length: 15,
        search: {
            value: 'test',
            regex: false
        }
}
}).done(function (d) {

});

发布请求时,search.value和search.regex绑定正确, 但获取请求,search.value和search.regex为空。

1 个答案:

答案 0 :(得分:0)

您不能在查询字符串中发送具有复杂对象作为属性的对象,除非您这样做:

var gridQuery = { start: 0,
    Draw: 10,
    Length: 15,
    Search.Value:'test',
    Search.Regex: false
    };
$.ajax(
{
    type: "GET",
    url: "DataGrid/GetData",
    data: gridQuery,
    success: function (data, status) {
        alert("Pass" + data);
    },
    error: function (ex) {
        alert("Fail" + ex);
    }
});