繁体   English   中英

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

[英]Passing JS array of objects to MVC controller without using a Model

我正在尝试集中化应用程序中的功能之一。 在整个站点中,我们有许多区域用户可以将表格(Syncfusion Grid)导出为ex​​cel。 我们遇到的一个问题是,每当用户进行过滤/排序以维护新的表数据布局时,如果用户确实要导出,则我们必须往返于服务器,戳数据库并运行附带的脚本。 替代方法是,每次用户过滤或在导出请求时,我们都会发送过滤出的列。

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

足够的背景知识,我正在尝试将通用数组发送到MVC控制器,在POC期间,我正在使用一个已经存在的功能并试图对其进行修改。

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

数据通过jQuery使用下面的Ajax发送到服务器

$.ajax({
        url: _url,
        type: "POST",
        dataType: 'json',
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify({ 'name': "Filler", 'grid': dataexport }),
        success: function (data) {
            // Do something neat
        },
        complete: function () { },
        error: function (e) {
            console.log(e);
        }
    });

数据看起来像

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

但是,当它碰到控制器时,无论使用List,Array还是IEnumerable,其值都将作为{object}返回。 我试过不对发送的数据进行字符串化,也不对数组内的对象数组进行字符串化。 如果我得到的数据是字符串,则我不能将其转换为可以访问每个已发送项目的数据值的对象。 我觉得这应该是微不足道的,但是我似乎无法将头转向如何解决。 我尝试序列化,反序列化,传递字符串以尝试访问数据。

您有两个原始类型参数和一个复合类型,可以对操作使用自定义路由,例如:controller / action / {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;

});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM