Передача файла после перенаправления на новое действие - PullRequest
1 голос
/ 26 августа 2011

В моем проекте появилась страница, которая создает гостевых пользователей для ряда выбранных продуктов.В основном вы указываете приложению, сколько пользователей нужно создать для каждого выбранного вами продукта.

Когда вы нажимаете «Сохранить», я генерирую гостей, сохраняю их имя пользователя и пароль (до шифрования) в файле 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"))

Происходит страница, передающая файл в браузер и никогда не выполняющая перенаправления, которое следует.Я прочитал немного по этому вопросу и обнаружил, что как только вы добавите заголовок к нашему объекту ответа и напишите файл, он автоматически закроет ответ.Если я не прав, поправьте меня.

Как я могу сделать возможным передачу этого файла после того, как пользователь будет перенаправлен в указатель или перенаправлен в указатель после того, как он сохранит или отменит загрузку файла?

1 Ответ

1 голос
/ 26 августа 2011

Я уже сталкивался с этой проблемой, и ее нелегко решить, по крайней мере, не кросс-браузерным способом.На onclick вашей кнопки Сохранить вы можете установить тайм-аут Javascript, который через пару секунд выполняет перенаправление на стороне клиента, используя window.location = "...url...";.Тем не менее, я почти уверен, что это не работает на одном конкретном браузере (вероятно, IE).

В противном случае, я бы переосмыслил ваш рабочий процесс, чтобы избежать загрузки и перенаправления в одном действии.Предоставьте кнопку «Сохранить», а затем, например, кнопку «Назад к указателю».В моем случае я поместил свое действие загрузки в «диалоговое окно» наложения jQuery.Когда файл начал загружаться, это был всего лишь случай закрытия диалога.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...