我正在尝试集中我们的应用程序中的一个功能。在整个网站中,我们有许多区域,用户可以将表格(Syncfusion网格)导出为excel。我们遇到的一个问题是,每当用户过滤/排序以维护新的表数据布局时,如果用户确实想要导出,我们必须往返服务器,戳数据库并运行附带的脚本。另一种方法是,每次用户过滤或导出请求时,我们都会发送过滤后的列。
我目前正试图在后一种情况下切换所有这些往返行程,只有在发出请求时才发送数据来减轻一些来回。我想做的是能够将每个网格发送到一个控制器,从数据中可以找出要显示的列。如果控制器接受列表< MODELNAME >,我可以找到目前为止的每个案例。但是,如果我遵循这个案例,我不确定它是否会奏效。我想我可以创建一个接受属性的通用导出模型。需要注意的是,这些表由DB驱动,以限制在需求发生变化时修改它们所需的工作量。要求由我们的客户向我们和我们的客户报告的报告机构设定,因此我们从未真正知道会发生什么变化。更改存储过程中返回的表会自动更新前面的表。这意味着如果该属性以前不存在,则DB的更改将需要对模型进行后续更新。
有足够的背景,我正在尝试向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}的形式返回。我已经尝试不对正在发送的数据进行字符串化,并将数组中的对象数组进行字符串化。在我获取数据的情况下,我只是无法转换为一个对象,我可以访问每个项目发送的数据值。我觉得这应该是微不足道的,但我似乎无法绕过如何去做。我尝试过序列化,反序列化,传递字符串以尝试访问数据。
答案 0 :(得分:0)
你有两个原始类型参数和一个复合,你可以使用自定义路线为你的行动,如: 控制器/动作/ {名称} / {忽略} 然后重新排序参数:
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);
}
});
在代码中检索对象后,将其转换为对象列表并对其进行处理。
答案 1 :(得分:0)
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);
}
});
答案 2 :(得分:0)
试试这个,我把它作为我的控制器中的自定义对象数组工作和绑定
$('#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;
});