ASP.NET:表单提交返回要下载的文件时的JS回调

时间:2016-11-17 08:21:41

标签: javascript asp.net file

我有一个同步工作的ASPX表单页面(没有AJAX!)。

此页面上的其中一个按钮通过将文件直接写入响应流来返回要下载的文件:

SADD tag1 doc1 doc3
SADD tag2 doc2 doc3

在浏览器显示“下载文件”对话框之前或之后,我需要在返回响应时在页面上调用javascript回调。

有没有办法做到这一点?

注意:服务器上存在的可以通过URL访问或下载的实际文件文件,不是在请求中生成并返回的文件,因此返回文件的URL然后转到在客户端使用JS下载不是一个选项

提前致谢! - 迈克尔

1 个答案:

答案 0 :(得分:1)

由于您的回复是将流作为内容类型返回,因此您无法使用相同的响应返回html / javascript。我建议创建一个专用的download.aspx或类似的下载文件并用javascript打开它:

download.aspx(空 - 没有html):

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="download.aspx.cs" Inherits="WebApplication2.download" %>

download.aspx.cs(Page_Load):

public partial class download : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.ContentType = "application/octet-stream";
        Response.AppendHeader("Content-Disposition", "attachment; filename=logfile.txt");
        Response.TransmitFile(Server.MapPath("~/wmtest.docx"));
        Response.End();
    }
}

从您的网页下载文件:

 <input type="button" class="js-download" value="Download file"/>
  <script>
        var button = document.getElementsByClassName("js-download")[0];
        button.addEventListener("click", function () {
            window.open("download.aspx", "download");

            console.log("download starting....")
        });
  </script>