Asp.net mvc Создать PDF Асинхронно по нажатию кнопки - PullRequest
0 голосов
/ 20 марта 2012

Я создал серверную часть приложения, которая по запросу создаст PDF-отчет. Затем ссылка на этот отчет может быть отправлена ​​обратно клиенту.

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

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

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

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

1 Ответ

0 голосов
/ 20 марта 2012

Я сделал нечто подобное.
Когда пользователь нажимает кнопку, он отправляет 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.

Это еще один бит 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 в качестве индикатора загрузки обратной связи. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...