Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.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# 在不使用模型的情况下将对象的JS数组传递给MVC控制器_C#_Ajax_Asp.net Mvc - Fatal编程技术网

C# 在不使用模型的情况下将对象的JS数组传递给MVC控制器

C# 在不使用模型的情况下将对象的JS数组传递给MVC控制器,c#,ajax,asp.net-mvc,C#,Ajax,Asp.net Mvc,我正试图集中应用程序中的一个功能。在整个网站中,我们有许多用户可以将表格(Syncfusion网格)导出为excel的区域。我们遇到的一个问题是,每当用户筛选/排序以维护新的表数据布局时,如果用户确实想要导出,我们必须往返到服务器,插入数据库并运行附带的脚本。另一种方法是,每次用户过滤或导出请求时,我们都会发送过滤列 我目前正在尝试切换所有这些往返,在后一个选项中,仅在请求时发送数据,以减少一些来回。我想做的是能够将每个网格发送到单个控制器,该控制器可以从数据中找出要显示的列。到目前为止,我能找

我正试图集中应用程序中的一个功能。在整个网站中,我们有许多用户可以将表格(Syncfusion网格)导出为excel的区域。我们遇到的一个问题是,每当用户筛选/排序以维护新的表数据布局时,如果用户确实想要导出,我们必须往返到服务器,插入数据库并运行附带的脚本。另一种方法是,每次用户过滤或导出请求时,我们都会发送过滤列

我目前正在尝试切换所有这些往返,在后一个选项中,仅在请求时发送数据,以减少一些来回。我想做的是能够将每个网格发送到单个控制器,该控制器可以从数据中找出要显示的列。到目前为止,我能找到的每一种情况都是控制器是否接受列表,但如果我遵循这种情况,我不确定它是否有效。我想我可以创建一个通用的导出模型来接受属性。需要注意的是,这些表由DB驱动,以限制在需求发生变化时修改它们所需的工作。要求是由我们的客户向其报告的报告机构设定的,既不是我们也不是我们的客户,因此我们永远不知道会发生什么变化。更改存储过程中返回的表会自动更新前面的表。这意味着,如果该属性以前不存在,对DB的更改将需要对模型进行后续更新

足够的背景知识,我正在尝试向MVC控制器发送一个通用数组,在POC期间,我正在使用一个已经存在的特性并尝试修改它

public void ExportAlertListToExcel(string name, List<object> grid, string ignore = "")
数据看起来像

[
{name: 'One', age: '10'},
{name: 'Two', age: '12'},
{name: 'Three', age: '14'},
{name: 'Four', age: '16'},
]

但是当它点击控制器时,不管使用列表、数组或IEnumerable,值都将返回为{object}。我已经尝试过不序列化正在发送的数据,也不序列化数组中的对象数组。在我获取数据的情况下,它是一个字符串,我无法转换为一个对象,在这个对象中,我可以访问每个发送的项目的数据值。我觉得这应该是一件小事,但我似乎不知道该怎么做。我尝试了序列化、反序列化和传递字符串以尝试访问数据。

您有两个基本类型参数和一个组合,您可以使用自定义路由进行操作,如: 控制器/操作/{name}/{ignore} 然后对参数重新排序:

public void ExportAlertListToExcel(string name , string ignore = "",object grid)

$.ajax({
    url: 'contrller/action?name=filler&ignore=c',
    type: "POST",
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    data: dataexport,
    success: function (data) {
        // Do something neat
    },
    complete: function () { },
    error: function (e) {
        console.log(e);
    }
});

在代码中检索对象后,将其强制转换为对象列表并处理它。

JSON数组数据类型为字符串。你试过这个吗

public void ExportAlertListToExcel(string grid)


$.ajax({
    url: 'contrller/action?name=filler&ignore=c',
    type: "POST",
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    data: dataexport,
    success: function (data) {
        // Do something neat
    },
    complete: function () { },
    error: function (e) {
        console.log(e);
    }
});

试试这个,我让它在我的控制器中作为我的自定义对象数组工作和绑定

  $('#costRowAdd').click(function () {
var shipmentCost = {
    CarrierName: $("#AgentCarrierID").val(),
    CostName: $("#ShipmentCostLineItems option:selected").html(),
    Quantity: $("#ShipmentCostqty").val().replace(',', ''),
    Rate: $("#ShipmentCostrate").val().replace('$', '').replace(',', ''),
    EstimatedCost: $("#ShipmentCostcharge").val().replace('$', '').replace(',', '')
}
var shipmentCosts = [];
shipmentCosts.push(shipmentCost);

$.ajax({
    url: 'AddShipmentCosts',
    type: 'POST',
    dataType: 'json',
    data: { ShipmentCosts: shipmentCosts, ShipmentNumber: $('#ShipmentNumber').val() },
    success: function (data) {

        LoadShipmentCosts($("#ShipmentNumber").val());
        $("#ShipmentCostqty").val('');
        $("#ShipmentCostrate").val('');
        $("#ShipmentCostcharge").val('');

    }
});

return false;

}))

如果尝试在控制器操作中接受JObject,会发生什么情况?(我从未尝试过)@Joe_DM我尝试过,吐出500个错误。我也尝试过,JObject失败了,但它对JArray有效,因为它是一个列表。我可以让您的示例以这种方式工作。我刚刚做了另一个测试,
List
似乎也可以正常工作。@如果您的原始json字符串为空,则您将永远无法对其进行反序列化。。。我认为一定是发生了其他事情,因为听起来你根本没有得到任何json。
  $('#costRowAdd').click(function () {
var shipmentCost = {
    CarrierName: $("#AgentCarrierID").val(),
    CostName: $("#ShipmentCostLineItems option:selected").html(),
    Quantity: $("#ShipmentCostqty").val().replace(',', ''),
    Rate: $("#ShipmentCostrate").val().replace('$', '').replace(',', ''),
    EstimatedCost: $("#ShipmentCostcharge").val().replace('$', '').replace(',', '')
}
var shipmentCosts = [];
shipmentCosts.push(shipmentCost);

$.ajax({
    url: 'AddShipmentCosts',
    type: 'POST',
    dataType: 'json',
    data: { ShipmentCosts: shipmentCosts, ShipmentNumber: $('#ShipmentNumber').val() },
    success: function (data) {

        LoadShipmentCosts($("#ShipmentNumber").val());
        $("#ShipmentCostqty").val('');
        $("#ShipmentCostrate").val('');
        $("#ShipmentCostcharge").val('');

    }
});

return false;