1

我对这段代码有一个动作:

Response.Clear();
Response.ContentType = result.MimeType;
Response.Cache.SetCacheability(HttpCacheability.Private);
Response.Expires = -1;
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment; filename=File.pdf");
Response.BinaryWrite(result.DocumentBytes);
Response.End();
return null;

我使用 JavaScript 从视图中调用此操作

$.ajax({
        url: '@Url.Action("GenerateFile")',
        type: "POST",
        data: printData,
        dataType: "json"});

我在操作中的代码执行,但我没有看到任何 pdf 文件。我认为发生这种情况是因为我返回null或做错了其他事情。如何解决此问题并使用 JavaScript 显示文件(显示保存文件对话框)?

4

2 回答 2

1

当您使用 AJAX 获取某些内容时,您不会看到任何“保存文件”对话框。

此外,您的 AJAX 调用指定结果应为 JSON,因此 jQuery 将尝试将 PDF 解析为 JSON,这自然会以错误消息的形式结束。

要获得保存文件对话框,您必须将文件作为常规页面打开:

window.location = '@Url.Action("GenerateFile")?' + printData;
于 2013-06-27T08:32:42.607 回答
0

我认为您说问题在于返回 null 是对的,您设置的响应将被进一步覆盖。尝试这个:

return File(result.DocumentBytes, "application/pdf");

编辑

抱歉,我没有正确阅读问题。正如 Guffa 提到的,问题在于您通过 javascript 调用此操作的方式。

于 2013-06-27T08:31:47.560 回答