2011-05-25 25 views
4

Internet Explorer中使用提示用戶做的Response.Write

Response.ContentType = "application/vnd.ms-excel"; 
      Response.AddHeader("Content-Disposition", "attachment;filename=\"sheet.xls\""); 
      Response.RedirectLocation = "export.xls"; 
      Response.Charset = ""; 
EnableViewState = false; 

      System.IO.StringWriter oStringWriter = new System.IO.StringWriter(); 
      System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter); 

      dataGridResult.RenderControl(oHtmlTextWriter); 
      Response.Write(oStringWriter.ToString()); 

這個工程後,下載一個excel文件,當我回發到一個頁面的按鈕文件點擊事件。

我正在使用頁面作爲服務並執行$.get(),但結果會以HTML形式發回。我不提示打開excel文件。如何將提示發送給用戶?

$.get('ExcelService.aspx', 
         { batches: input }, 
         function (data) { 
          alert(data);//I see HTML 
         }); 
+0

您是否嘗試過使用Response.AppendHeader()? – jglouie 2011-05-25 14:53:53

+0

@jglouie - 我從AddHeader更改爲'Response.AppendHeader(「Content-Disposition」,「attachment; filename = \」sheet.xls \「」);'問題仍在繼續。 – 2011-05-25 15:05:17

回答

2

這是一個類似線程,類似的問題多一點靈活性( 「我想做一個異步GET請求,返回一個帶有MIME內容類型的文檔,並使它帶上瀏覽器的」保存「對話框。」)

How to specify content-type and content-disposition with $.ajax() GET response

有人有提供解決方法吧:

如果您想以編程方式彈出一個保存對話框,你可以使用jQuery一個隱藏的iframe追加到網頁的URL,因爲它的src。這將根據需要彈出對話框。


樣品
jQuery的 - 上點擊(不需要AJAX/GET)

  var dynamicUrl = 'ExcelService.aspx?batches=' + input; 
      $('#excelPopup').attr('src', dynamicUrl); 
      window.frames["#excelPopup"].location.reload(); 

HTML

<iframe id="excelPopup" style="visibility:hidden;height:0px;width:0px;"></iframe> 
+0

+1 - 我在你的答案中添加了一個實現。這適用於Firefox,但在IE7中不起作用。 IE7是我們的主要瀏覽器。任何人都知道如何讓這個在IE7中工作? – 2011-05-25 16:37:01

+0

我改變了'window.frames [「#excelPopup」]'(增加了丟失的#)。我猜FF在這種情況下比IE更寬容。 – 2011-05-25 16:44:18

0

你可以嘗試一個Ajax後

$.ajax({  dataType: "HTML", 
       cache: false, 
       type: "GET", 
       url: 'ExcelService.aspx'; 

這將促使get和已經不僅僅是使用jQuery

+0

我試過了,並沒有解決問題。我可能會錯過一些東西,但是按原樣(添加了數據元素),它沒有用。它遇到了一個斷點,但我仍然沒有被提示下載excel.xls – 2011-05-25 15:03:09