【发布时间】:2015-09-01 12:25:16
【问题描述】:
我正在尝试创建一个文件处理程序,供用户在网页上单击文件名时下载文件。我已经实施了几次没有问题,但我目前遇到了一个我无法理解的错误。
代码:
protected void btnViewFile_Click(object sender, EventArgs e)
{
var btnViewFile = sender as LinkButton;
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + btnViewFile.CommandArgument.ToString());
Response.WriteFile(Server.MapPath(btnViewFile.CommandArgument));
Response.End();
}
如果我查看浏览器控制台,我可以看到:
未捕获的 Sys.WebForms.PageRequestManagerParserErrorException: Sys.WebForms.PageRequestManagerParserErrorException: 无法解析从服务器接收到的消息。
代码中似乎没有抛出异常,请求的文件被转换成正确的完整路径;我已经尝试了很多不同的方法 - 手动清除标题,在结束前刷新,提供更明确的内容类型标题,使用 AddHeader 而不是 AppendHeader,使用 TransmitFile 而不是 WriteFile,等等。
有什么想法吗?
【问题讨论】:
-
我实际上看不到它被扔到任何地方。
-
您的问题出在一些客户端代码上。你有客户端代码吗?
-
您正在尝试从更新面板下载文件。您不能这样做(当 m$ 客户端引擎尝试将响应解析为 html 以查看页面的哪一部分已更新时,他会看到二进制文件)。您必须禁用 AJAX 才能下载文件。例如见stackoverflow.com/questions/5461525/…
-
下载控件不在更新面板中。应该在原始帖子中添加它被认为是回发罚款。