2009-01-07 75 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」,然後單擊添加

單擊關閉 - >確定 - >確定

希望這也適用於你;)