2012-03-19 38 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作爲負載反饋指標。 希望它有幫助。