新しいアクションにリダイレクトした後にファイルを送信する

asp.net-mvc asp.net-mvc-2 vb.net
新しいアクションにリダイレクトした後にファイルを送信する

私のプロジェクトでは、選択した多数の製品のゲストユーザーを作成するページがありました。 基本的には、選択した各製品に対して作成するユーザー数をアプリケーションに指示します。

「保存」をクリックすると、ゲストが生成され、プロセスの最後に送信する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


ベストアンサー

私は以前にこの問題を解決しましたが、解決するのは簡単ではありません。少なくともクロスブラウザの方法では解決できません。 [保存]ボタンの[onclick]で、JavaScriptタイムアウトを設定できます。これにより、数秒で、 `window.location =” …​ url …​ “;`を使用してクライアント側のリダイレクトが行われます。 ただし、特定のブラウザでは動作しなかったと確信しています(おそらく)。

それ以外の場合は、同じアクションでダウンロードとリダイレクトが行われないように、ワークフローを再検討します。 たとえば、「保存」ボタンに続いて「インデックスに戻る」ボタンを指定します。 私の場合、ダウンロードアクションをjQueryオーバーレイ「ダイアログ」に配置します。 ファイルのダウンロードが開始されたとき、それはダイアログを閉じるだけのケースでした。

1


タイトルとURLをコピーしました