2012-03-19 40 views
0

我已经创建了一个应用服务器端,当请求时将创建一个报告的pdf。然后,该报告的链接可以发送回客户端。Asp.net mvc创建PDF异步按钮点击

我的问题是我如何将它钩到我的asp.net mvc网站中的按钮单击事件。所以情景是:

  1. 用户填写几个框。
  2. 点击生成报告按钮。
  3. 显示一个小负载反馈指示器。
  4. 将请求发送到服务器,然后服务器生成PDF报告并将URL链接发送回服务器上托管的pdf。
  5. 该pdf将在用户浏览器中显示(也许在新窗口中)。

这是可能的,是否有任何示例显示如何做到这一点?

在此先感谢

+3

最好的办法可能是使用Ajax和带有Json响应的控制器。让它处理并返回url,然后将该url显示给用户。 – 2012-03-20 00:00:58

回答

0

我做了类似的事情。
当用户点击该按钮将它发送一个Ajax请求传递一些数据的服务器:

$.ajax({ 
    type: 'POST', 
    dataType: 'json', 
    url: '<%=Url.Action("GenerateReport", "MyController")%>', 
    data: { Param1: $('#Param1').val() , Param2: $('#Param2').val() }, 
    beforeSend: function(xhr) { 
     $.blockUI({ message: '<h1> printing ...</h1>', css: { border: 'none', padding: '15px', backgroundColor: '#000', '-webkit-border-radius': '10px', '-moz-border-radius': '10px', opacity: .5, color: '#fff'} }); 
    }, 
    success: function(result) { 
     if (result.Success) { 
      FetchPdfDocument('<%=Url.Action("GetPdfReport", "MyController", New With {.id = "/"})%>' + result.Guid); 
    } 
    else { 
     alert("Problems!"); 
    } 
    }, 
    complete: function() { 
     $.unblockUI(); 
    }, 
    error: function(req, status, error) { 
     alert(error); 
    } 
}); 

控制器写入在盘上的文件并发送回一个GUID是PDF文档的名称。

这是打开文件创建一个IFRAME的JavaScript的其他位:

function FetchPdfDocument(UrlToPdf) 
    { 
    $('#ifPdfReport').remove(); 
    $(document.body).append('<IFRAME id="ifPdfReport" style="display:none;">'); 
    $('iframe#ifPdfReport').attr('src', UrlToPdf); 
    // $('#ifPdfReport').load(function() { });      
    } 

我使用jQuery的BlockUI作为负载反馈指标。 希望它有帮助。