Webアプリケーションを介してdocxファイルを提供しています。これは、DropDownListインデックスが変更されたことに応じて行われます。私は、AutoPostBackをtrueに設定しています。チェックボックスで選択できるオプションがいくつかあります。ドロップダウンを変更すると、作成されるファイルはチェックされたオプションに基づいています。
つまり、私が行っているのは、イベントが発生したときに、ドキュメントを作成して提供するために魔法をかけることです。
Protected Sub myDropDown_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles myDropDown.SelectedIndexChanged
' a bunch of things happen here but the end result is the contents of a docx file in a MemoryStream with the
' name mainStream
'here is where I set up the response and serve the file:
Response.ClearContent()
Response.ClearHeaders()
Response.AddHeader("content-disposition", "attachment; filename=document.docx")
Response.ContentEncoding = System.Text.Encoding.UTF8
Response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
mainStream.WriteTo(Response.OutputStream)
mainStream.Close()
mainStream.Dispose()
Response.End()
さて、私の質問は、この時点で何をすべきかということです。Response.End()を呼び出してバッファリングされたコンテンツを送信する必要があるようですが、チェックボックスがオンになっているページと、変更されたオプションのドロップダウンが表示されたままになります。ポストバックを引き起こすページ上の他のボタンを押すと、ドロップダウンの選択されたインデックス変更イベントが再び発生するようです。
私がやりたいのは、ファイルを送信した後にリダイレクトすることです。Response.End()がページの実行を停止するため、Response.redirectは機能しません。このような状況が通常どのように処理されるかを誰かに教えてもらえますか?ファイルが提供された後にページ上の別のコントロールがポストバックを実行した場合に、ドロップダウン用に選択されたインデックスイベントが再び発生する理由を誰かに教えてもらえますか?どんなアドバイスも大歓迎です。ありがとう!