ajax post数据在控制器asp.net mvc 5中为null

问题描述 投票:-2回答:2

我尝试将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显示为空。

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

c# asp.net asp.net-ajax
2个回答
0
投票

尝试将partnerDeposit添加到JSON.stringify调用,如下所示:

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

0
投票

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

  1. 您会发现在您的控制器中,它正在接收Request.Form对象,如果您查看Request.Form [0],您将找到您的数据。表单中存在数据但MVC将其视为空的原因是表单元素被POST的键是“”(空白)。
  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
}

`

© www.soinside.com 2019 - 2024. All rights reserved.