2

以下代码将无法在安装了最新服务包的 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 中工作。

干杯,
迪米

4

5 回答 5

2

添加一个 Header明确告诉 IE缓存文件。如果将文件作为无缓存文件发送,则 IE 存在无法正确保存文件的已知错误。

于 2009-01-07T13:03:13.650 回答
2

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

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

这为我的用户修复了它。

希望有帮助。

于 2009-09-04T21:44:02.170 回答
1

在我们的 Intranet 上遇到此问题,自动提示下载对我不起作用(已被选中),但这确实......

工具 -> Internet 选项

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

单击高级

输入“http://your.url.com”并点击添加

单击关闭->确定->确定

希望这对你也有用;)

于 2011-03-31T10:01:45.907 回答
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 访问它时有效

于 2009-01-12T17:56:30.617 回答
0

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

于 2009-05-10T22:49:01.330 回答