2009-01-07 105 views
2

以下代码在安装了最新Service Pack的IE7中将无法正常运行。文件下载对话框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(); 

我打开aspx文件中的JS(window.open()),并在Page_Load执行上面的代码()。

奇怪的是,弹出的窗口,试图加载/显示文件对话框,然后你听到声音就像一个弹出窗口已被阻止(虽然弹出窗口阻止程序已停用!)。

额外信息:
- 行为发生都在XP和W2K3(这是没有任何其他安装,但IE7 & FW 3.5 SP1 &最新的服务包一个真正的Web服务器。) - 相同的代码工作正常FW 2.0 - Firefox不会显示文件对话框。

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

干杯,
低糜

回答

2

添加页眉告诉IE 明确缓存文件。 IE已经知道错误,如果它作为无缓存文件发送,则无法正确保存文件。

+0

问题通过调整IE中用于处理来自特定主机的弹出窗口的设置来解决。 感谢您的意见 – 2009-01-08 10:21:50

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

0

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

2

我有同样的问题,并花了一个小时完全沮丧。像往常一样,微软IE浏览器是所有令人头疼的根源。在其他浏览器中一切正常。解决方法很简单: 用户将不得不通过点击 “工具”>“Internet选项”>“安全”选项卡>对于“Internet”和/或“本地Intranet”,通过点击来调整安全设置按钮,“自定义级别”

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

这固定它为我的用户。

希望有所帮助。

1

在我们的内部网上有这个问题,自动提示下载对我来说不起作用(已经被选中),但是这样做...

工具 - > Internet选项

在安全选项卡中选择 '本地Intranet',然后点击网站

单击高级

类型“http://your.url.com”,然后单击添加

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

希望这也适用于你;)