ASP.NET MVC3 アプリケーションを開発しています。ファイルダウンロード用のコントローラーがあります:
public ActionResult PDF(string id)
{
try
{
// here I unzip a file, DownName comes from here
Response.Clear();
Response.AddHeader("Content-Disposition",
"attachment; filename=" + id + ".pdf");
Response.ContentType = "application/pdf";
Response.WriteFile(DownName);
Response.Flush();
Response.Close();
System.IO.File.Delete(DownName);
return View();
}
catch (Exception)
{
message = "File not found.";
}
return Json(new { message = message }, JsonRequestBehavior.AllowGet);
}
クライアント側では、この PDF ファイルを取得する必要があります。ただし、ファイルが見つからない場合は、「ファイルが見つかりません」などのテキストで警告します。私は多くの方法を試しましたが、最終的にこれになりました:
$(function(){
$(".pdf").click(function(e) {
e.preventDefault();
$.post("@Url.Action("PDF","Helper")",{id : $(this).data("id")},function(data){
if(data.message == "File not found.") {
alert(data.message);
} else {
alert(data);
}
});
});
});
ファイルが見つからない場合は、エラー メッセージを正常に警告できます。ここにあるデータの保存ダイアログ ボックスを開くにはどうすればよいですか? コントローラーで作業できる他の方法も高く評価されます。
編集:次のようにコントローラーを呼び出すと、ファイルを簡単にダウンロードできます。
<a href="../../Helper/PDF/@Model.ID">Download PDF</a>
ただし、この結果がファイルと JSON でない場合、ページは JSON オブジェクトを表示する空白のページにリダイレクトされます。前に言ったように、画面にアラートを出したいです。この方法での回避策もありがたいです。