下面是我的AJAX GET请求,它试图将一些参数(包括javascript对象)传递给mvc控制器,但该对象始终作为null接收:
var sort = { column: 'UserName', order: 'desc' };
var sortParameter = JSON.stringify(sort);
$.ajax({
url: '@Url.Action("GetUsers", "Account")',
cache: false,
type: 'GET',
contentType: 'application/json; charset=utf-8',
data: { skipRecords: vm.pageIndex * 1000, sortParam: sortParameter },
success: function (data) {
}
});
控制器方法如下所示:
[HttpGet]
public JsonResult GetUsers(int skipRecords, Sort sortParam, string userName = null)
{
}
以下是定义的排序类:
public class Sort
{
public string column { get; set; }
public string order { get; set; }
}
如果我不使用JSON.stringify并仅传递javascript对象,则下面是发送的请求:
GET /Account/GetUsers?skipRecords=0&sortParam%5Bcolumn%5D=UserName&sortParam%5Border%5D=desc&_=1408990051727 HTTP/1.1
答案 0 :(得分:3)
你可能正在寻找:
var sortParameter = { column: 'UserName', order: 'desc' };
$.ajax({
url: '@Url.Action("GetUsers", "Account")',
cache: false,
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify({
skipRecords: vm.pageIndex * 1000,
sortParam: sortParameter }),
success: function (data) {
}
});
您的代码不起作用的原因是因为如果您没有JSON.stringify整个结果,它将作为查询字符串编码传递。您不能将JSON作为查询字符串编码值中的值传递。
Querystring encoded(Post或Get)看起来像:a=1&b=2&c=3
所以你的查询字符串看起来像skipRecords=5&sortParam={column:'UserName',order:'desc' }
MVC不会双重解码querystring和json。
答案 1 :(得分:0)
使用POST并将[FromBody]添加到您的'排序'动作方法中的对象参数。