2010-09-09 54 views
5

我正在將一個gridview導出爲ex​​cel,在Web應用程序中使用.Net 4.0,頁面加載時需要生成文件,然後頁面被重定向到呼叫頁面。我遇到的問題,因爲我的代碼導出到Excel如下:在C#中調用Response.End()之後重定向到另一個頁面

gvSummary.Style.Add("font-size", ".6em"); 
    Response.Clear(); 
    string attachment = "attachment; filename=filename.xls"; 
    Response.ClearContent(); 
    Response.AddHeader("content-disposition", attachment); 
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
    StringWriter sw = new StringWriter(); 
    HtmlTextWriter htw = new HtmlTextWriter(sw); 
    gvSummary.GridLines = GridLines.Horizontal; 
    gvSummary.RenderControl(htw); 
    Response.Write(sw.ToString()); 
    Response.End(); 

我知道,如果我把的Response.Redirect()的.END()之前,我會重定向但文件從來沒有生成,如果我把.End()之後的Response.Redirect()我得到的文件,但沒有重定向。

上面寫的代碼在生成文件時工作得很好,但是當生成文件後,我仍然看不到我的加載動畫,因爲我無法跳出頁面。有任何想法嗎?

回答

8

我建議添加一個重定向頭。事情是這樣的:

Response.AddHeader("Refresh", "3; url=index.html"); 

其中3是延遲和index.html的時間就是你需要重定向到

+0

由於請求的結果是一個xls文件,而不是html,會真的有用嗎? – 2010-09-09 13:24:37

+0

我想是的。因爲首先使用HTTP來傳遞響應。在這種情況下,HTTP包看起來像是一組頭,然後是二進制數據(xls文件)。在某些情況下adiitionaly它將有必要設置應用程序/八位字節流的contcon類型,但它取決於我們需要什麼樣的結果 – ILya 2010-09-09 13:36:03

+0

它沒有工作,它會加載文件,但不重定向... – EvanGWatkins 2010-09-09 13:39:30

1

的問題是到Response.End(URL)的頁面的最後一位發送到客戶端才能完成請求。在你的情況下,請求包含文件。

一個可能的解決方案是打開一個新的下載頁面並保持重定向到當前頁面。

0

你不能做到既開放,所以你可能會想嘗試在新窗口或源設置鏈接到生成的XLS文件到一個IFRAME

0

在JavaScript:

function refresh() { document.location.reload(true); } 

按鈕:

<td valign="top" style=" width:100px "> 
<asp:Button runat="server" ID="btnX" Text="X" CssClass="ui-button ui-widget ui-state-default ui-corner-all ui-button-text ui-state-hover" OnClientClick="refresh();" Width="180px" /> 
</td> 
0

我試圖打開通過ScriptManager的一個單獨的頁面,而在我原來的網頁做重定向,將下載我的文件。

所以我添加下面的代碼在我的主頁:

string strScript = "<script language='javascript'> window.open('CommonDownload.aspx','Report');</script>"; 
ScriptManager.RegisterStartupScript(Page, this.GetType(), "clientScript", strScript, false); 
Response.Redirect("Page.aspx"); 

然後在我的CommonDownload頁的Page_Load方法添加的下載代碼。我在CommonDownload頁面中通過會話傳遞了我需要的一些信息。

相關問題