PDFの生成とPDFのダウンロードの両方として機能するジェネリックハンドラー(DownloadHandler.cs)があります。生成時には jQuery ajax 呼び出しを使用し、ダウンロード時には送信されたフォーム要素を使用します。問題は、フォーム要素が生成要求をキャンセルするため、「成功」イベントが呼び出されないことです (下の画像を参照)。
コードを生成します (ボタンから呼び出されます):
$.ajax({
type: "POST",
url: "/DownloadHandler.ashx",
data: {
GeneratePdf: true
},
success: function (result) {
console.log(result);
},
error: function (errorMessage) {
console.log(errorMessage);
}
});
コードをダウンロード (ボタンから呼び出されます):
var data = { "GeneratePdf": false }
var inputs = '';
$.each(data, function (key, value) {
inputs += '<input type="hidden" name="' + key + '" value="' + value + '" />';
});
$('<form action="/DownloadHandler.ashx" method="POST">' + inputs + '</form>').appendTo('body').submit().remove();
ダウンロードハンドラ:
public void ProcessRequest(HttpContext context)
{
if (!String.IsNullOrEmpty(context.Request["GeneratePdf"]) && Convert.ToBoolean(context.Request["GeneratePdf"]))
{
Thread.Sleep(3000);
context.Response.Clear();
context.Response.Write("GENERATING");
context.Response.Flush();
}
else
{
Thread.Sleep(3000);
FileInfo pdfFile = new FileInfo(@"C:\1.pdf");
context.Response.Clear();
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + pdfFile.Name);
context.Response.AddHeader("Content-Length", pdfFile.Length.ToString());
context.Response.ContentType = "application/octet-stream";
context.Response.WriteFile(pdfFile.FullName);
context.Response.Flush();
}
}
public bool IsReusable
{
get
{
return false;
}
}
pdf の生成を示すために Thread.Sleep を追加しました。何か不足していますか、それとも他の方法を使用する必要がありますか?