我尝试将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 () {
}
})}
这是被称为控制器的方法:
https://i.stack.imgur.com/FqEt9.png
我遇到的问题是上面的json变量总是一个空对象。调用success函数,但是当我调试时,json var显示为空。
请告诉我我做错了什么。谢谢。
答案 0 :(得分: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 () {
}
})
答案 1 :(得分:0)
我还没有在其他任何地方找到这个答案,所以我不得不通过实验发现它。希望这会对某人有所帮助。
您会在控制器中发现它正在接收Request.Form对象,如果您查看Request.Form [0],您将找到您的数据。表单中的数据但MVC将其视为空的原因是表单元素被POST的关键是"" (空白)。
所以客户端,您必须正确设置内容类型,并在数据之前添加类似" 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
}
`