ASP.NET通过EventHandler中添加的客户端javascript下载文件

ASP.NET通过EventHandler中添加的客户端javascript下载文件,javascript,asp.net,onclick,download,Javascript,Asp.net,Onclick,Download,我对ASP.NET不是很熟练,我已尝试: 更新aspx站点上的UI元素 同时下载一个文件 我有一个JS函数: function downloadURL(url) { var hiddenIFrameID = 'hiddenDownloader', iframe = document.getElementById(hiddenIFrameID); if (iframe === null) {

我对ASP.NET不是很熟练,我已尝试:

  • 更新aspx站点上的UI元素
  • 同时下载一个文件
  • 我有一个JS函数:

    function downloadURL(url) {
                var hiddenIFrameID = 'hiddenDownloader',
                    iframe = document.getElementById(hiddenIFrameID);
                if (iframe === null) {
                    iframe = document.createElement('iframe');
                    iframe.id = hiddenIFrameID;
                    iframe.style.display = 'none';
                    document.body.appendChild(iframe);
                }
                iframe.src = url;
            };
    
    和此按钮服务器控件:

    <asp:Button runat="server" ID="Button1" Content="DOWNLOAD" OnClick="Button1_Click" />
    

    你认为这种方法怎么样。它似乎可以工作,但是…

    它们与
    MyDownloadHandler.ashx
    头文件有关。如果您在处理程序ashx中添加了此标题

     HttpContext.Current.Response.ContentType = "application/octet-stream";
     HttpContext.Current.Response.AddHeader("Content-Disposition", 
                        "attachment; filename=" + SaveAsThisFileName);
    
    然后浏览器将打开文件保存浏览器,而不是新选项卡

    你只需要用javascript就可以了

    window.location = "MyDownloadHandler.ashx";
    
    或者只是一个简单的链接

    总而言之,你已经创建了很多不必要的代码,你制作了一个帖子,这也是不必要的

    亲属:

    它们与
    MyDownloadHandler.ashx
    头文件有关。如果您在处理程序ashx中添加了此标题

     HttpContext.Current.Response.ContentType = "application/octet-stream";
     HttpContext.Current.Response.AddHeader("Content-Disposition", 
                        "attachment; filename=" + SaveAsThisFileName);
    
    然后浏览器将打开文件保存浏览器,而不是新选项卡

    你只需要用javascript就可以了

    window.location = "MyDownloadHandler.ashx";
    
    或者只是一个简单的链接

    总而言之,你已经创建了很多不必要的代码,你制作了一个帖子,这也是不必要的

    亲属:

    但它会把你带到另一个页面,还是?我需要做回发来更新UI元素。可能您不需要回发,您可以为要在客户端下载的文件创建参数。但是如果你需要发回帖子,你可以直接把文件发给他,而不是重新加载页面。但是这会把你带到另一个页面,或者?我需要做回发来更新UI元素。可能您不需要回发,您可以为要在客户端下载的文件创建参数。但是,如果您需要发回帖子,那么您可以直接向他发送文件,而不重新加载页面。好的,但是我应该在哪里设置textboxy.Text=“文件下载后的文本”?我必须用javascript来完成所有这些事情。。或者?@PaN1C_showt1; me是的,您可以在客户端这样做,或者您可以像其他人那样(我避免这样做)直接将文件发回。或者在页面呈现之后,您只需在脚本区域中呈现
    window.location=“MyDownloadHandler.ashx?id=22”
    。好的,但是我在哪里设置textboxy.Text=“文件下载后的文本”?我必须用javascript来完成所有这些事情。。或者?@PaN1C_showt1; me是的,您可以在客户端这样做,或者您可以像其他人那样(我避免这样做)直接将文件发回。或者在页面呈现之后,只需在脚本区域中呈现
    window.location=“MyDownloadHandler.ashx?id=22”