重定向到新操作后传输文件

时间:2011-08-26 10:38:01

标签: asp.net-mvc vb.net asp.net-mvc-2

在我的项目中,我得到了一个页面,可以为所选的多个产品创建访客用户。 基本上,您告诉应用程序为您选择的每个产品创建多少用户。

当您点击“保存”时,我会生成来宾,将他们的用户名+密码(加密前)保存在我在流程结束时传输的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 个答案:

答案 0 :(得分:1)

我之前已经遇到过这个问题并且不容易解决,至少不是以跨浏览器的方式解决。在“保存”按钮的onclick上,您可以设置Javascript超时,在几秒钟内,使用window.location = "...url...";进行客户端重定向。但是,我很确定这不适用于某个特定的浏览器(IE可能)。

否则,我会重新考虑您的工作流程,以避免在同一操作中进行下载和重定向。例如,提供“保存”按钮,然后是“返回索引”按钮。就我而言,我将下载操作放在jQuery overlay“对话框”中。当文件开始下载时,只是关闭对话框的情况。