这就是我解决它的方法。决定放弃纯 JavaScript 解决方案,以减轻客户端的处理压力,转而在服务器端处理。
因为我已经使用存储过程从数据库中获取数据,所以我使用它来再次获取数据集并将其转换为 ViewExportModel,因此我有一个 TotalViewExport 和一些基于选定的变量我填充了不同的模型。
添加到现有的显示功能以更新选定变量以跟踪当前选定的视图。
当用户点击导出表格到 excel 时,它会调用当前页面的控制器 IE。 AlarmReport (so AlarmReportController) 和我创建了动作 ExportReports(int?SelectedView);
此外,我添加了CsvExport 作为经理。这需要数据结果(因此 c# 模型/ iqueryables/ 列表/ 等)。并将它们放入 Csv 集中。使用返回类型 BinaryContent 可以导出包含此数据的 .csv 文件。
ExportReports 操作使用 selectedview 参数调用存储过程。结果被泵入正确的模型。这个模型作为行被注入到 CsvExport 模型中。
文件名是根据选择的视图+选择的对象+当前日期(yyyy-MM-dd)。例如“Total_Dolfinarium_2016-05-13”。让
最后,该操作使用 CsvExport 中的 BinaryContent Returntype 和 ExportToBytes 将 .csv 文件作为下载返回
这个动作的导出部分是这样编程的(缩短了一些检查,比如选择了多个对象等)(预先收集了数据和对象名):
public ActionResult ExportCsv(CsvExport Data, string ObjectName, string Type){
var FileName = Type + "_" + ObjectName + "_" + DateTime.Now.ToString("yyyy/MM/dd");
return BinaryContent("text/csv", FileName + ".csv", Data.ExportToBytes());
}