Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Ajax方法的对象数组_C#_Asp.net_Ajax_Asp.net Mvc 5_Controller - Fatal编程技术网

C# Ajax方法的对象数组

C# Ajax方法的对象数组,c#,asp.net,ajax,asp.net-mvc-5,controller,C#,Asp.net,Ajax,Asp.net Mvc 5,Controller,我一直在尝试将这个数组ajax到我的控制器,但是数据到达时被设置为null 我的职能: 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: gr

我一直在尝试将这个数组ajax到我的控制器,但是数据到达时被设置为null

我的职能:

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();
}
函数saveChanges(){
var grid=$(“#GridName”).data(“kendoGrid”);
var gridData=grid.dataSource.data();
var dataArray=[];
对于(var i=0;i
我的控制器:

public virtual string Method(List<DateName> gridData)
    {


        return string.Empty;
    }

public class DateName
{
    public DateTime Date { get; set; }
    public string Name { get; set; }
}
公共虚拟字符串方法(列出gridData)
{
返回字符串。空;
}
公共类日期名
{
公共日期时间日期{get;set;}
公共字符串名称{get;set;}
}
控制器识别已发送1条记录,但该记录的值为空

Debug.write(数据数组)
返回:

[对象对象],[对象对象]

使用
数据类型:“json”
传统:true

$.ajax({
    url: GetUrlRoot() + "Controller/Method",
    data: dataArray,
    async: false,
    dataType: "json",
    traditional: true,
    success: function () {

    },
    error: function () {

    },
    cache: false,
})

在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

 data: { gridData: dataArray },
在java中,脚本将匹配c中的以下对象模型#

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

//...

var url = GetUrlRoot() + "Controller/Method";
var data  = { gridData: dataArray };
$.ajax({
    url: url,
    type: 'POST',
    data: data,
    async: false,
    success: function () {

    }
    error: function () {

    },
    cache: false,
});

现在它返回一个没有属性的空数组,您可以发布
console.log(dataArray)
for
循环之后,也尝试
数据:dataArray,
而不是仍然是相同的结果可以发布
dataArray的转储文件吗?当我使用此方法时,gridData在进入方法时等于null。该操作是post还是GET操作?该操作是GET。这就是问题所在。将请求和控制器操作转换为POST并发送请求正文中的数据。方法中的dataArray仍然为null,我已将两者都设置为POST。版本差异很大,因此我必须对提供的答案进行一些更改。检查更新。谢谢!现在可以了,有没有一个具体的原因可以解释为什么我的方法不起作用?@GeorgeB默认情况下,GET会尝试序列化数据并将其添加到querystring中,querystring通常不会正确绑定到控制器使用的模型。通过使用匹配的数据对象发布数据,模型绑定器可以使用请求主体中发送的数据正确初始化和填充对象模型
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,
});