您好,我正在寻找有关如何在ASP.NET MVC中导出为excel的最佳方法
现在我从billsternberger.net得到了这个
使用C#从ASP.NET MVC导出到Excel或CSV
//Export to excel public ActionResult Download() { List<Lookup> lookupList = data,GetLookupList(); var grid = new System.Web.UI.WebControls.GridView(); grid.DataSource = lookupList; grid.DataBind(); Response.ClearContent(); Response.AddHeader("content-disposition", "attachment; filename=YourFileName.xlsx"); Response.ContentType = "application/vnd.ms-excel"; StringWriter sw = new StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw); grid.RenderControl(htw); Response.Write(sw.ToString()); Response.End(); return View(); }
从绑定到datagrid并导出到excel。
现在,我需要做的是获取我的html表并将其导出到excel,在这里我在处理表数据时使用了jquery datatable,因此它的重量更轻,因为它是在客户端完成的。
我尝试使用jquery和ajax将html表传递给控制器上的实体
function Export() { var details = {}; details.LookupName = $("#tblLookup").html(); //Validate details var url_ = generateURL("/Home/Download"); //Call Save Controller and pass details entities $.ajax({ type: "POST", url: url_, data: details, //details will act as the Entities Model traditional: true, success: function(data) { }, error: function(XMLHttpRequest, textStatus, errorThrown) { alert("error: " + XMLHttpRequest.responseText); }, dataType: 'json' }); };
但这把我扔了,A potentially dangerous Request.Form value was detected from the client等等。
A potentially dangerous Request.Form value was detected from the client
如何在MVC上完成?我已经在寻找类似的话题,但是它总是使我陷入第一个工作样本中。
在此致谢
最简单的解决方案是将HTML表导出为CSV文件并发送到服务器。让我们举个例子。假设我们已经定义了一个视图模型:
public class ExportViewModel { [AllowHtml] public string Csv { get; set; } }
和一个控制器:
public class HomeController : Controller { public ActionResult Index() { return View(new ExportViewModel()); } [HttpPost] public ActionResult Export(ExportViewModel model) { var cd = new ContentDisposition { FileName = "YourFileName.csv", Inline = false }; Response.AddHeader("Content-Disposition", cd.ToString()); return Content(model.Csv, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); } }
现在,在相应的视图中,我们假设我们已经生成了一些<table>(生成此表的方式在这里实际上并不有趣):
<table>
@model ExportViewModel <table id="myTable"> <thead> <tr> <th>Id</th> <th>Name</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>Foo</td> </tr> <tr> <td>2</td> <td>Bar</td> </tr> </tbody> </table> @using (Html.BeginForm("Export", null, FormMethod.Post, new { id = "export" })) { @Html.HiddenFor(x => x.Csv) <button type="submit">Export to Excel</button> } <script type="text/javascript" src="http://www.kunalbabre.com/projects/table2CSV.js"></script> <script type="text/javascript"> $('#export').submit(function () { $('#Csv').val($('#myTable').table2CSV({ delivery: 'value' })); }); </script>
我们正在使用table2CSV jQuery plugin将HTML表转换为CSV格式。然后,在将表单提交给服务器之前,结果CSV将存储在一个隐藏字段中。
table2CSV jQuery plugin
如果要构建本机XLSX文件,则必须在服务器上使用OpenXML SDK。您不能仅获取HTML表并将其转换为本地Excel文件。由于您只需要将数据发送到服务器,因此该解决方案将更难以实施,但是它将允许您对生成的Excel文件进行更大的自定义。