ajax post data在控制器asp.net mvc 5

时间:2016-12-11 08:23:17

标签: c# asp.net asp.net-ajax

我尝试将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变量总是一个空对象。调用success函数,但是当我调试时,json var显示为空。

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

2 个答案:

答案 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)

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

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

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

  3. $.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
    }
    

    `