我希望允许我的用户点击“下载”按钮,然后动态构建动态csv文件,并提示用户下载。我知道如何使用HTTPHandler构建文件,但不太确定通过下载传递内容的机制。
答案 0 :(得分:11)
我通常会创建一个Generic Handler(.ashx)并执行以下操作:
public void ProcessRequest(HttpContext context)
{
StringBuilder myCsv = new StringBuilder();
foreach(myRow r in myRows) {
myCsv.AppendFormat("\"{0}\",{1}", r.MyCol1, r.MyCol2);
}
context.Response.ContentType = "application/csv";
context.Response.AddHeader("content-disposition", "attachment; filename=myfile.csv");
context.Response.Write(myCsv.ToString());
}
现在,如果您正在构建的CSV非常大,您可能希望在创建它时写出每一行,而不是将其填充到StringBuilder中。
答案 1 :(得分:0)
只需在HTTP处理程序代码中发出Content-Disposition
HTTP标头。大多数浏览器会将其解释为下载请求。将yourfile.csv
替换为您希望用户查看的文件名。
context.Response.ContentType = "text/csv";
context.Response.AddHeader("Content-Disposition", "attachment; filename=yourfile.csv");