[英]Passing JS array of objects to MVC controller without using a Model
我正在尝试集中化应用程序中的功能之一。 在整个站点中,我们有许多区域用户可以将表格(Syncfusion Grid)导出为excel。 我们遇到的一个问题是,每当用户进行过滤/排序以维护新的表数据布局时,如果用户确实要导出,则我们必须往返于服务器,戳数据库并运行附带的脚本。 替代方法是,每次用户过滤或在导出请求时,我们都会发送过滤出的列。
我目前正在尝试将所有这些往返行程切换为后一种选择,即仅在发出请求以减轻某些来回往返时才发送数据。 我想做的是能够将每个网格发送到单个控制器,该控制器可以从数据中找出要显示的列。 到目前为止,每种情况下我都能找到控制器是否接受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.