为了账号安全,请及时绑定邮箱和手机立即绑定

Ajax 对象数组到方法

Ajax 对象数组到方法

C#
慕盖茨4494581 2021-11-28 20:10:33
我一直在尝试将这个数组ajax 到我的控制器,但是当它到达时数据被设置为空。我的功能:function saveChanges() {var grid = $("#GridName").data("kendoGrid");var gridData = grid.dataSource.data();var dataArray = [];for (var i = 0; i < gridData.length; i++) {    dataArray.push({Date: gridData[i].Date, Name: gridData[i].ProductName});}$.ajax({    url: GetUrlRoot() + "Controller/Method",    data: { gridData: dataArray },    async: false,    success: function () {    },    error: function () {    },    cache: false,})grid.saveChanges();}我的控制器:public virtual string Method(List<DateName> gridData)    {        return string.Empty;    }public class DateName{    public DateTime Date { get; set; }    public string Name { get; set; }}控制器识别出已发送 1 条记录,但该记录的值为空。
查看完整描述

3 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

 data: { gridData: dataArray },

在java脚本中将匹配c#中的以下对象模型


public class GridDataObject {

    public List<DateName> gridData { get; set; }

}

但是,这与中的参数参数不匹配


public virtual string Method(List<DateName> gridData)

因此,首先,更新控制器操作以期望从客户端发送所需的对象模型。


一个简单的例子在控制器中看起来像这样


[HttpPost]

public virtual string Method(GridDataObject data) {

    //...


    var gridData = data.gridData;


    //...


    return string.Empty; //strictly for demo purposes.        

}

其次,客户端需要使用正确的格式发送数据。


//...


var url = GetUrlRoot() + "Controller/Method";

var data  = { gridData: dataArray };

$.ajax({

    url: url,

    type: 'POST',

    data: data,

    async: false,

    success: function () {


    }

    error: function () {


    },

    cache: false,

});


查看完整回答
反对 回复 2021-11-28
?
阿晨1998

TA贡献2037条经验 获得超6个赞

使用dataType: "json"和traditional: true


$.ajax({

    url: GetUrlRoot() + "Controller/Method",

    data: dataArray,

    async: false,

    dataType: "json",

    traditional: true,

    success: function () {


    },

    error: function () {


    },

    cache: false,

})


查看完整回答
反对 回复 2021-11-28
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

在您的 jQuery Ajax 部分:


将设置数据更改为:


data: JSON.stringify(dataArray),

method: 'POST', //or type:'POST' based on jQuery version

...

然后您还可以将控制器更改为:


public virtual string Method([FromBody]DateName[] gridData){

...

}

因此,通过这些更改,$.ajax 会将 JSON 发布到您的控制器,并且您的控制器将从请求正文中解析 JSON。


查看完整回答
反对 回复 2021-11-28
  • 3 回答
  • 0 关注
  • 195 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信