ASP.NET 未出现 MVC 下载提示

ASP.NET MVC download prompt not appearing

我正在尝试在控制器操作中生成 Excel .xlsx 文件。我想让网站显示下载提示以下载生成的文件。控制器操作执行正常,但没有显示下载提示。没有任何反应。

我试过:

         MemoryStream mstream = ... //generated file;

         return File(mstream.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", model.DisplayName + ".xlsx");

我试过:

        return new FileStreamResult(mstream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = model.DisplayName + ".xlsx" };

我试过:

        Response.Clear();
        Response.AddHeader("Content-Disposition", "attachment; filename=" + model.DisplayName + ".xlsx");
        Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

        Response.Write(mstream.ToArray());
        Response.End();

        return Content("");

我什至尝试将文件保存到磁盘,然后通过文件路径返回

        return File(filepath, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")

我做错了什么? 谢谢!

我在 MVC 项目中使用以下代码。

public ActionResult GetCSV()
{
    string filename = "example";
    string csv = MyHelper.GetCSVString();
    return File(Encoding.UTF8.GetBytes(csv.ToString()), "text/csv", string.Format("{0}.csv", filename));
}

我的 csv 字符串看起来像这样

"Col1,Col2,Col3\nRow1Val1,Row1Val2,Row1Val3\n"

要在新 window 中触发此下载,我调用以下 JavaScript

window.open('/MyUrl/GetCSV', 'DownloadWindowName');

添加header如下。

var cd = new System.Net.Mime.ContentDisposition
            {
                FileName =  model.DisplayName + ".xlsx",
                Inline = false
            };
Response.AppendHeader("Content-Disposition", cd.ToString());

然后return文件如下

return File(mstream, ".xlsx");

关于下载提示。如果您的意思是询问文件保存位置的提示,那么这取决于用户在浏览器设置中的设置方式。例如在chrome中,用户可以选择在下载文件时不提示,将文件下载到预先指定的位置,如下载文件夹。 http://malektips.com/google-chrome-prompt-download-file.html#.VM-DbFWsUm8