【问题标题】:Forces to prompt download box IE强制提示下载框IE
【发布时间】:2011-02-25 14:21:45
【问题描述】:

我正在处理的应用程序中的一些报告有问题

我有一个按钮,可以回发到服务器并执行一些信息,然后返回给客户端并打开一个弹出窗口以下载报告。

    private void grid_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
 ...
 ClientScript.RegisterClientScriptBlock(this.GetType(), "xxx", "<script>javascript:window.location('xx.aspx?m=x','xxx','width=750,height=350,directories=no,location=no,menubar=no,scrollbars,status=no,toolbar=no,resizable=yes,left=50,top=50');</script>");
}

然后在 xxx.aspx 我有代码:

 Response.ClearContent();
 Response.ClearHeaders();
 Response.TransmitFile(tempFileName);
 Response.Flush();
 Response.Close();

 File.Delete(tempFileName);

 Response.End();

如果启用了 IE 选项文件下载的自动提示,这可以正常工作。但默认情况下这是禁用的,我需要强制下载框提示。

我可以在不更改大量代码的情况下做任何事情吗?

谢谢。

【问题讨论】:

    标签: .net asp.net internet-explorer download


    【解决方案1】:

    这是 Internet Explorer 的设计。该开关告诉 IE 不显示对话框,除非用户右键单击并从菜单中选择“下载”。

    对此你无能为力。

    Source:

    自动下载阻止会自动抑制不是由用户启动的文件下载对话框(例如通过单击鼠标或按键)。当对话框被阻止时,信息栏会出现在窗口顶部。用户可以通过点击信息栏下载被屏蔽的内容。

    【讨论】:

    • 嗯...嗯,我没有得到顶部的信息栏。弹出窗口关闭,我没有看到任何有关下载的信息。
    • 嗯...你甚至没有下载栏。在 IE 中,您可以按 F12 并分析网络流量。可能那里有问题。
    • 是的,但这发生在我尝试的所有计算机上。
    【解决方案2】:

    有一个标题会导致显示下载框。尝试添加 Content-Disposition 标头来触发它:

    Content-Disposition:附件;文件名=fname.ext

    【讨论】:

      【解决方案3】:

      我过去做过这个,似乎有效。我猜您正在尝试传输硬盘上存在的文件...

      版本 1
      在您的 Page_Load 事件处理程序中。添加这个...(示例在 VB 中)

      'Prepare page for a file download 
      Response.ContentType = "application/x-msdownload"
      Response.AddHeader("content-disposition", "attachment; filename=thefilename.ext")
      Response.WriteFile(pathToFile)
      

      此代码用于将 Excel 文件返回给用户。

      版本 2(取自旧项目的代码)
      在服务器上的按钮单击事件中

          Dim Results As New DataSet()
          Results.DataSetName = "SearchExport"
      
          Dim SearchTable As DataTable     
          Dim sFileName As String = "SearchExport.xls"
      
          Response.ContentType = "application/x-msexcel"
          Response.AddHeader("content-disposition", String.Format("attachment; filename={0}", sFileName))
          SearchTable = GetTheSearchResults()
          SearchTable.TableName = "SearchResults"
          Results.Tables.Add(SearchTable)
      
         ' This example takes the xml and converts it to HTML using XSLT, replace this with  your string of data that should be returned. Or put Response.WriteFile() instead.
          Response.Write(ConvertToString(Results.GetXml))
          Response.End()
      

      此答案的第 2 版是来自另一个项目的复制/粘贴,它不会直接执行您要查找的内容,但您应该能够填补空白。 (即删除临时文件等)

      【讨论】:

      • 添加了另一种方法,你是否清除了缓存? IE 可能正在使用缓存响应,而不是实际访问 Web 服务器。
      【解决方案4】:

      尝试使用

      window.open 而不是window.location

      希望对你有帮助

      【讨论】:

        【解决方案5】:

        设置适当的标题并使用 BinaryWrite 方法将起作用...

        string filePath = "the path to your file";
        
        byte[] fileData = MethodToReadBinaryContentsOfFile(filePath);
        
        Response.Clear();
        Response.ClearContent();
        Response.ClearHeaders();
        Response.Charset = null;
        Response.AddHeader("Content-Disposition", "attachment;filename=the name to save the file as");
        Response.ContentType = "binary/octet";
        Response.BinaryWrite(fileData);
        
        System.IO.File.Delete(filePath);
        
        Response.End();

        【讨论】:

          猜你喜欢
          • 2011-07-04
          • 1970-01-01
          • 1970-01-01
          • 2013-02-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-25
          • 1970-01-01
          相关资源
          最近更新 更多