2011-08-26 32 views
1

在我的項目中,我找到了一個爲所選產品創建訪客用戶的頁面。 基本上,您可以告訴應用程序爲您選擇的每種產品創建多少個用戶。重定向到新動作後傳輸文件

當您點擊'保存'時,我生成客人,將他們的用戶名和密碼(在加密之前)保存在我在過程結束時傳輸的csv文件中,最後將用戶重定向到索引頁。

的問題發生在文件傳輸和隨後重定向到一個新的動作:

Private Sub DownloadCsv(ByVal csv As List(Of String), ByVal filename As String) 
    Dim sb As New StringBuilder() 

    For Each Str As String In csv 
     sb.AppendLine(Str) 
    Next 
    ' Clear any previous response 
    Response.Clear() 


    ' Indicate we're returning a CSV file 
    Response.ContentType = "text/csv" 

    ' Provide filename for download    
    Response.AddHeader("content-disposition", "attachment;filename=" & filename & ".csv")    

    ' Write actual CSV data 
    Response.BinaryWrite(Encoding.ASCII.GetBytes(sb.ToString())) 


End Sub 

而在我的動作,我把這種方法DownloadCsv然後我重定向到索引像這樣:

Return (RedirectToAction("GroupIndex")) 

發生什麼事情是將文件傳輸到瀏覽器的頁面,並且從不執​​行隨後的重定向。 我在這件事上看了一會兒,發現一旦你給我們的Response對象添加一個Header並寫一個文件,它就會自動關閉Response。如果我錯了,請糾正我。

在用戶保存或取消文件下載之後,用戶被重定向到索引或重定向到索引後,如何才能傳輸此文件?

回答

1

我已經越過這個問題,並不容易解決,至少不是以跨瀏覽器的方式。在保存按鈕的onclick上,您可以設置一個Javascript超時,在幾秒鐘內使用window.location = "...url...";進行客戶端重定向。但是,我敢肯定,這不適用於一個特定的瀏覽器(IE可能)。

否則,我會重新考慮您的工作流程,以避免在同一操作中進行下載和重定向。例如,提供「保存」按鈕,然後是「返回索引」按鈕。在我的情況下,我把我的下載動作放在jQuery覆蓋「對話框」中。當文件開始下載時,僅僅是關閉對話框的情況。