2012-03-19 2 views
0

Я создал сервер приложений, который будет создавать PDF-отчет по запросу. Затем связь этого отчета может быть отправлена ​​обратно клиенту.Asp.net mvc Создать pdf Async при нажатии кнопки

Мой вопрос: как я могу подключить это к событию с нажатием кнопки на моем веб-сайте asp.net mvc. Таким образом, сценарий:

  1. Пользователь заполняет несколько ящиков.
  2. Нажмите кнопку генерации отчета.
  3. Показан небольшой индикатор обратной обратной связи.
  4. Запрос отправляется на сервер, затем сервер генерирует отчет в формате PDF и отправляет обратно ссылку на pdf, размещаемую на сервере.
  5. pdf будет отображаться в браузере пользователей (возможно, в новом окне).

Возможно ли это, и есть ли какие-либо примеры, показывающие, как это сделать?

Заранее спасибо

+3

Лучшая ставка, вероятно, используется Ajax и контроллер с ответ Json. Пусть он обрабатывает и возвращает URL-адрес, а затем отображает этот URL-адрес для пользователя. –

ответ

0

Я сделал что-то подобное.
Когда пользователь нажимает кнопку отправить его АЯКС запрос на сервер, проходящей некоторые данные:

$.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 документа.

Это другой немного JavaScript, который открывает файл, создавая IFRAME:

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

Я использовал JQuery BlockUI в качестве индикатора загрузки обратной связи. Надеюсь, это поможет.

Смежные вопросы