2011-01-28 5 views
3

ボタンをクリックすると、PDFが生成されてレスポンスに書き出されます。レスポンスにファイルを書き込んだ後に投稿を完了する方法はありますか?

これは、コードの基本的な構造である:ファイルのダウンロード

response.AddHeader("Content-Disposition", String.Format("attachment; filename={0}", filename)); 
response.AddHeader("Content-Length", bytes.Length.ToString()); 
response.ContentType = "application/octet-stream"; 
response.BinaryWrite(bytes); 

はそれがポストバックを完了しないことを除いて、正常に動作します:送信方法は、次のコードが含まれてい

try 
{ 
    using(Stream stream = generatePdf()) 
    { 
     var file = createFile(stream); 
     file.Transmit(HttpContext.Current.Response); 
    } 
} 
catch (Exception ex) 
{ 
    // Handle exception 
    // Display Error Message 
} 

file.Transmitの上に例外をスローすると、エラー処理が正常に動作し、メッセージがブラウザに表示されます。ただし、file.Transmitの後に例外がある場合は何も起こりません。ユーザーがPDFを保存/開くと、ページがリロードされません。

どのようにして、ポストバックが常に完了し、ユーザーに適切なメッセージを表示できるようにすることができますか?

答えて

4

上の私の質問のスレッドを使用すると、応答は二つの部分を含んで作るしようとしているように聞こえるのです。あなたはそれをすることはできません。通常、ダウンロードページは、JavaScriptが動作しない場合(JavaScript経由でダウンロードした場合)に別のリクエストとしてダウンロードされ、直接リンクされます。

いずれかのHTTP要求には、1つの応答しか含めることができません。

1

Response.End()は、文字通り応答全体を終了します。

私はそれを使用するときに私が採用して2つの方法があります。

1)は、必ずそれがポストバック中に必要な最終地点だことを確認してください。

2)(ファイル呼び出しにAJAXを使用する唯一の方法)iframeにファイルを送信し、フレームをリフレッシュする目的で小さなページを作成する... response.endは、そのフレームからの応答であり、ポストバック全体ではありません。

EDIT:ページ PDF:ここでは同じトピック Using Response.TransmitFile for physical file not working

関連する問題