在导出到可下载的Excel内容时遇到问题,使用AngularJS& ASP.NET MVC。我的最终结果没有任何反应。
ASP.NET控制器方法示例:
[HttpPost]
public ActionResult ExportToExcel(Model form)
{
var gv = new GridView();
gv.DataSource = _service.getSomeStuff(form);
gv.DataBind();
Response.ClearContent();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment; filename=Stuff.xls");
Response.ContentType = "application/ms-excel";
Response.Charset = "";
var sw = new StringWriter();
var htw = new HtmlTextWriter(sw);
gv.RenderControl(htw);
Response.Output.Write(sw.ToString());
Response.Flush();
Response.End();
byte[] temp = System.Text.Encoding.UTF8.GetBytes(sw.ToString());
return File(temp, "application/ms-excel");
}
角度控制器方法: - >通过ng-click处理程序
触发function exportToExcel() {
$http.post('/Controller/ExportToExcel/', vm.Model)
.success(function (data) {
})
.error(function (data) {
alerts.error(data);
});
}
查看:
<a href="" ng-click="vm.exportToExcel()">click me</a>
有关我可能做错的任何建议吗?
答案 0 :(得分:0)
我做过类似的事情,不需要AJAX或任何JS。只需要调整Razor代码即可。
其次,我的个人建议是根本不转换为Excel文件。原因是,用户需要在其本地计算机上安装Office。这也意味着,如果您将项目上传到网站,该服务器计算机将需要安装Office才能生成您的Excel文件。
话虽如此,我建议只使用CSV文件。如果用户安装了Office,他们就可以使用Excel像任何电子表格一样查看文件。
以下是一些代码,它将使用StringBuilder
和Reflection
从dbcontext中的dbset创建名为Export.csv的CSV。
public ActionResult Export()
{
StringBuilder str = new StringBuilder();
var tmp = db.Users.FirstOrDefault();
Type comp = tmp.GetType(); // get type
foreach (PropertyInfo prop in comp.GetProperties())
{
str.Append(prop.Name + ","); //set column names
}
str.Replace(",", "\n", str.Length - 1, 1);
foreach (object item in db.Users)
{
foreach (PropertyInfo prop in item.GetType().GetProperties())
{
try
{
string a = prop.GetValue(item, null).ToString();
str.Append(a + ",");
}
catch (NullReferenceException)
{
str.Append("null" + ","); //for nulls, append string with "null"
}
}
str.Replace(",", "\n", str.Length - 1, 1);
}
string csv = str.ToString();
return File(new System.Text.UTF8Encoding().GetBytes(csv), "text/csv", "Export.csv");
}
然后,您可以使用视图中的链接访问下载文件,如下所示:
<a href="@Url.Action("Export", "Controller")">click me</a>
希望这有帮助。