文件下载对话框IE7消失

时间:2009-01-07 10:44:37

标签: c# asp.net .net-3.5 internet-explorer-7 filedialog

在安装了最新Service Pack的IE7中,以下代码无法正常运行。

System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.Clear();
response.AddHeader("Content-Disposition", "attachment;filename=Contacts.xls");
response.ContentType = "application/octet-stream";

System.Text.UnicodeEncoding Encoding = new System.Text.UnicodeEncoding();

byte[] unicodeBytes = {255,254};
int length = 2 + Encoding.GetByteCount(_exportContent); // _exportContent is string.
response.AddHeader("Content-Length", length.ToString());
response.OutputStream.Write(unicodeBytes, 0, 2);
unicodeBytes = Encoding.GetBytes(_exportContent);
response.OutputStream.Write(unicodeBytes, 2, unicodeBytes.Length);
response.End();

我用js(window.open())打开aspx页面并在Page_Load()中执行上面的代码。

奇怪的是,窗口弹出,尝试加载/显示文件对话框,然后你听到弹出窗口被阻止的声音(虽然弹出窗口阻止器被禁用!)。

额外信息:
- 行为发生在XP和W2k3上(这是一个真正的Web服务器,没有安装任何其他东西,但IE7和FW 3.5 SP1和最新的服务包。) - 相同的代码适用于FW 2.0 - Firefox显示文件对话框没有问题。

如果其他人遇到同样的问题并且可以提供解决方案以使该工作在IE7中工作,我会很好奇。

干杯,
低糜

5 个答案:

答案 0 :(得分:2)

添加一个标题告诉IE 显式到CACHE文件。 IE已经知道如果文件作为无缓存文件发送,则无法正确保存文件。

答案 1 :(得分:2)

我遇到了同样的问题,花了一个小时完全沮丧。像往常一样,微软IE浏览器是所有头痛的根源。在其他浏览器中一切正常。解决方案很简单: 用户必须通过转到来调整IE7设置 '工具'> '互联网选项'> '安全'标签>对于“Internet”和/或“本地Intranet”,请单击“自定义级别...”按钮调整安全设置。

转到“下载”节点'>自动提示文件下载'>选中“启用”

为我的用户修复了它。

希望有所帮助。

答案 2 :(得分:1)

如果我们的内部网出现此问题,自动提示下载对我来说不起作用(已被选中),但这确实......

工具 - >互联网选项

在“安全”选项卡上,选择“本地Intranet”,然后单击“站点”

点击高级

键入“http://your.url.com”并单击“添加”

点击关闭 - >好的 - >确定

希望这也适合你;)

答案 3 :(得分:0)

我仍然无法让对话框消失。当应用程序访问[webmethod]以收集信息以传递到尝试将结果下载到excel的页面时,会发生这种情况。

            Response.Clear();

            Response.ClearHeaders();
            Response.ClearContent();

            Response.Charset = "";
            Response.ContentType = "application/vnd.ms-excel";
            Response.AddHeader("Content-Disposition", "attachment; filename=\"" + fileNameToUse + "\"");
             Response.CacheControl = "Public";

            Response.Write(output);
            Response.Flush();
            Response.Close();

只有在使用IP地址(999.11.1.111 \ default.aspx ....)访问网络时才会出现这种情况。它通过loacalhost \ default.aspx

访问它时有效

答案 4 :(得分:0)

要测试安全性是否导致此问题,请将目标设置为_self。应该出现IE顶部的警告栏。 如果这是原因,请检查IE安全性。特别是提示下载部分。