2012-08-24 73 views
0

我有一個主頁/主菜單頁面。有一個鏈接到表單。如果您使用輸入運行表單,則會得到Excel輸出。如果您單擊「打開」在瀏覽器中打開該輸出,後退按鈕會將您帶到主頁/主菜單。BinaryWrite頁面未按預期工作

這是可以理解的,因爲如果表單頁面是X.aspx,那麼輸出Excel的binaryWrite並不會真的改變它。

問題是,如果有回發,後退按鈕會將您帶到表單頁面。這是不一致的。如果我運行頁面或下拉菜單導致回發,我確實希望後退按鈕將我帶到表單域,以便我可以再次運行Excel表單。

我試過的東西。

我試着添加一個位置標題。

e.ContentFileName = "ELTFile.Output.xls"; 

的response.Writing之前...

private void SendFileToBrowser(DownloadFileEventArgs e) 
{ 
    if (!e.Cancel && e.FileObject != null) 
    { 
     this.Page.Response.Clear(); 
     this.Page.Response.ClearContent(); 
     this.Page.Response.AddHeader("Content-Disposition", string.Format("inline; filename={0}", e.ContentFileName)); 
     this.Page.Response.AddHeader("Content-Length", e.FileObject.LongLength.ToString()); 
     this.Page.Response.AddHeader("Location", e.ContentFileName); 
     this.Page.Response.ContentType = e.ContentType; 
     this.Page.Response.BinaryWrite(e.FileObject); 
     this.Page.Response.End(); 
    } 
} 

我試着

Response.Cache.SetCacheability(HttpCacheability.Public); 

除了

Response.Cache.SetCacheability(HttpCacheability.Server); 

但基本上,這取決於是否我點擊「提交」之前回復,但噸來生成Excel,我得到主菜單(不想要)或表單頁面(想要)。我每次都需要表單頁面。基本上我想告訴瀏覽器「我知道這不是一個真正不同的頁面,但以這種方式對待,你會喜歡嗎?」

回答

1

您不能直接將頁面添加到瀏覽器歷史記錄中。

你可以使你的應用程序的表單總是一個超出excel輸出的頁面。

要做到這一點,有一個單獨的頁面輸出excel。 當你有生成excel的輸入,Response.Redirect到生成頁面。 這將使您的輸入表單保留在瀏覽器歷史記錄中。

注意:如果您喜歡,也可以重定向到同一頁面,但這需要您跟蹤它。

+0

謝謝。我會把你的標記作爲答案。我應該自己想想。但由於某種原因,我陷入了陷入困境,認爲我可以操縱Response對象來相信'之前'和'之後'是兩個不同的頁面。再次感謝。 – user426364