2017-01-10 3 views
0

Есть ли что-нибудь, что я пропустил? В запросе $ .ajax 'get' и 'post'. .net mvc modelbinder не смог корректно связать complexType в запросе get, но корректно связывается с почтовым запросом.DefaultModelBinder ведет себя по-разному с jquery ajax в режиме get и 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 равна нулю.

+0

не посылают сложный объект в GET! используйте POST – Shyju

+0

Для GET он должен быть 'data: {start: 0, .... search.value: 'test', search.regex: false}' - точечная нотация (я предполагаю, что вы опущены некоторые важные детали, включая тот факт, что вы указываете 'contentType: 'json'' и строят данные) –

+0

серверная сторона может получить значение, подобное этому запросу [" search [regex] "], которые доказывают, что значение отправлено на сервер , так что DefaultModelBinder просто не знает, как их связать? – Kratos

ответ

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); 
    } 
}); 
+0

Вам нужно удалить 'contentType:" application/json; ",' и использовать только 'data: gridQuery,' (не строковое). В запросе GET нет тела, поэтому 'contentType' бессмысленно. –

+0

Спасибо. Отредактировал ответ – CodingYoshi

+0

на стороне сервера, я могу получить значение даже в get request var value = Request ["search [value]"]; var regex = Request ["search [regex]"], но mvc не привязывает их! – Kratos

 Смежные вопросы

  • Нет связанных вопросов^_^