别介意以下内容。我发现我的问题是由应用程序中其他地方的js代码引起的。
我的申请表格提交。这将转到控制器上的动作方法,它执行此操作:
Response.ClearHeaders();
Response.AppendHeader("Content-Disposition", "attachment; filename=SQLQueryResult.csv");
Response.AppendHeader("Content-Length", sb.Length.ToString());
Response.ContentType = "text/csv";
Response.Write(sb.ToString());
Response.End();
return null;
这很好用。浏览器将此视为要下载的附件。但是,浏览器还会显示“未保存的表单更改”提示。
有没有办法避免这个提示?当它是一个简单的asp.net页面时,我没有这个问题,但现在我已经转换为mvc了。
答案 0 :(得分:1)
很难说,但您展示的代码是反MVC模式。以下是为下载文件提供服务的MVC控制器操作的样子:
public ActionResult Download()
{
StringBuilder sb = ...
var csv = Encoding.UTF8.GetBytes(sb.ToString());
return File(csv, "text/csv", "SQLQueryResult.csv");
}
如您所见,控制器操作不会写入响应。那不是他们的目的。他们返回行动结果。正是这些行动结果应该注意将结果呈现给客户。