C# 在不使用模型的情况下将对象的JS数组传递给MVC控制器
我正试图集中应用程序中的一个功能。在整个网站中,我们有许多用户可以将表格(Syncfusion网格)导出为excel的区域。我们遇到的一个问题是,每当用户筛选/排序以维护新的表数据布局时,如果用户确实想要导出,我们必须往返到服务器,插入数据库并运行附带的脚本。另一种方法是,每次用户过滤或导出请求时,我们都会发送过滤列 我目前正在尝试切换所有这些往返,在后一个选项中,仅在请求时发送数据,以减少一些来回。我想做的是能够将每个网格发送到单个控制器,该控制器可以从数据中找出要显示的列。到目前为止,我能找到的每一种情况都是控制器是否接受列表,但如果我遵循这种情况,我不确定它是否有效。我想我可以创建一个通用的导出模型来接受属性。需要注意的是,这些表由DB驱动,以限制在需求发生变化时修改它们所需的工作。要求是由我们的客户向其报告的报告机构设定的,既不是我们也不是我们的客户,因此我们永远不知道会发生什么变化。更改存储过程中返回的表会自动更新前面的表。这意味着,如果该属性以前不存在,对DB的更改将需要对模型进行后续更新 足够的背景知识,我正在尝试向MVC控制器发送一个通用数组,在POC期间,我正在使用一个已经存在的特性并尝试修改它C# 在不使用模型的情况下将对象的JS数组传递给MVC控制器,c#,ajax,asp.net-mvc,C#,Ajax,Asp.net Mvc,我正试图集中应用程序中的一个功能。在整个网站中,我们有许多用户可以将表格(Syncfusion网格)导出为excel的区域。我们遇到的一个问题是,每当用户筛选/排序以维护新的表数据布局时,如果用户确实想要导出,我们必须往返到服务器,插入数据库并运行附带的脚本。另一种方法是,每次用户过滤或导出请求时,我们都会发送过滤列 我目前正在尝试切换所有这些往返,在后一个选项中,仅在请求时发送数据,以减少一些来回。我想做的是能够将每个网格发送到单个控制器,该控制器可以从数据中找出要显示的列。到目前为止,我能找
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;