我希望能够在不使用 ASP.NET MVC 中的“Html.Beginform”的情况下接收从控制器返回的 pdf 文件的打开/保存对话框。我正在使用“Ajax.Beginform”,因为我可以注册事件来触发OnBegin 和 OnComplete(我认为在使用 Html.Beginform 时我不能这样做,或者是吗?)。
我想说明问题不是在使用“Html.Beginform”时从服务器创建和接收文件,因为它工作正常,但没有我想使用的事件。我正在使用“Ajax.Beginform”并且文件正在从控制器返回,但在客户端之后没有任何反应。
我的cshtml
@using (Ajax.BeginForm("CreatePdf", "Print", null, new AjaxOptions() { LoadingElementId = "printLoading", OnSuccess = "printPageComplete"}, new { id = "exportForm" }))
{
//Stuff abbreviated
<input type="button" onclick="onPrint()" />
}
我的 jQuery
function onPrint()
{
//Stuff abbreviated
$("#exportForm").submit();
}
function printPageComplete(result)
{
//this 'result' variable is obviously holding the file from the controller
//stuff abbreviated
//TODO: I need to open file dialog here
}
我的控制器
[HttpPost]
public ActionResult CreatePdf(FormCollection collection)
{
//Stuff abbreviated
return File(thePdf, _mimeTypes[ExportFormat.Pdf], "thePdf.pdf")
}
正如你所看到的,我已经设法在 printPageComplete 函数中做到了这一点,但我不确定从这里去哪里。我应该继续使用 ajax 表单还是应该坚持使用 html 表单并尝试找到其他方法来触发我非常需要使用的事件?
也许我要解决这一切都错了,您的帮助将不胜感激。