0

我希望能够在不使用 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 表单并尝试找到其他方法来触发我非常需要使用的事件?

也许我要解决这一切都错了,您的帮助将不胜感激。

4

1 回答 1

0

您可以在不使用Ajax.BeginForm. 这是更多的工作,但给你更多的灵活性:

$('#exportForm').submit(function (e){
   e.preventDefault();

  //Do any validation or anything custom

  $.ajax({
     //set ajax settings

     success: function(){
       // Handle the success event
     }
    });
});
于 2013-08-15T22:07:07.417 回答