ajax post 控制器中的数据为空 asp.net mvc 5

ajax post data is null in controller asp.net mvc 5

我尝试将 JSON 对象发送回服务器。这是我的AJAX电话

 function SaveData() {
var model = []
debugger
$.each($('.Money'), function (i, item) {
    model.push({
        Money: $('.Money').eq(i).val(),
        Day: $('.Day').eq(i).val(),
        Note: $('.Note').eq(i).val()
    });
})
$.ajax({
    url: '@Url.Action("Create")',
    contentType: "application/json",
    async: true,
    data: { partnerDeposit: JSON.stringify(model) },
    type: 'POST',
    dataType: 'json',
    succsess: function () {
    }
})}

这是正在调用的控制器中的方法:

enter image description here

https://i.stack.imgur.com/FqEt9.png

我遇到的问题是上面的 json 变量总是一个空对象。成功函数被调用但是当我调试时 json var 显示为空。

请告诉我我做错了什么。谢谢。

尝试像这样将 partnerDeposit 添加到 JSON.stringify 调用中:

$.ajax({
    url: '@Url.Action("Create")',
    contentType: "application/json",
    async: true,
    data: JSON.stringify({partnerDeposit: model}),
    type: 'POST',
    dataType: 'json',
    succsess: function () {
    }
})

我在其他任何地方都找不到这个答案,所以我不得不通过实验来发现它。希望这会对某人有所帮助。

  1. 您会发现在您的控制器中,它正在接收一个 Request.Form 对象,如果您查看 Request.Form[0],您会找到您的数据。表单中有数据但 MVC 将其视为 null 的原因是要发布的表单元素的键是“”(空白)。

  2. 所以客户端,你必须正确设置内容类型,并在你的数据前面加上类似 "myData=" + JSON.stringify(myJSONObject) 的内容,其中 "myData"是您要添加的键名,如下所示:

$.ajax({ type: "POST", url: URL, data: "myData="+JSON.stringify(myJSONObject), contentType: "application/x-www-form-urlencoded; charset=utf-8"

在服务器端,您的 [HttpPost] 端点必须将一个变量作为其输入,该变量与您在 AJAX 中声明的键同名,像这样:

`
[HttpPost]
[Authorize]
public ActionResult Index (string myData) // <-- var name matches AJAX
{
   // de-serialize data into server-side object using 
   // JSONConvert.DeserializeObject
}

`