2016-06-27 2 views
-2

Я работаю в приложении ASP.NET MVC (бритва), которое использует интерфейс Kendo. Я должен показать отчет, когда клиент нажимает кнопку. Но отчет не так быстр, и я должен показать сообщение во всплывающем окне для клиента, что-то вроде этого: «Создаваемый отчет - через какое-то время появится новое окно с результатами». Как показать всплывающее окно с сообщением? И где в коде? Пожалуйста, см. Код, который я использую. Кнопка:Всплывающее окно с сообщением в приложении ASP.NET MVC

<a class="k-button k-button-icontext k-grid-Patient" id="hrefAllCheckedPatientsRep" style="display:none;" href="#" onclick="getAllChecked();">Generate Report</a>&nbsp; 

Это функция getAllChecked() в JavaScript:

function getAllChecked() { 
     $('#checkedMsgRep').text('');  

     $.ajax({ 
      type: "POST", 
      url: "/PatientReport/ExportToPDF", 
      dataType: "json", 
      traditional: true, 
      data: { uniqueIds: checkedArray }, 
      success: function (data) { 
       if (data.success) { 
        // $('#lnkPdfDownload').show(); 
        //$('#lnkPdfDownload').attr('href', '/PatientReport/DownloadFile' + '?fName=' + data.fName); 
        $('#myFrame').attr('src', '/PatientReport/DownloadFile' + '?fName=' + data.fName); 
       } else { 
        //$('#lnkPdfDownload').hide(); 
       } 

      }, 
      error: function (jqXHR, textStatus, errorThrown) { 
       $('#checkedMsgRep').text('@ELSORegistry.Resources.Views.Patient.PatientStrings.CheckedError').show(); 
       $('#hrefCheckedPatientsRep').blur(); 
      } 
     }); 
     } 

В контроллере у меня есть Действие:

[AcceptVerbs(HttpVerbs.Post)] 
      public ActionResult ExportToPDF(List<String> uniqueIds) { 
      // step 1: creation of a document-object 
       var document = new Document(PageSize.A4.Rotate(), 3, 3, 80, 50); 
//Here is the code for export to pdf 
// Add table to the document 
      document.Add(dataTable); 

      //This is important don't forget to close the document 
      document.Close(); 

     byte[] byteInfo = output.ToArray(); 
     output.Write(byteInfo, 0, byteInfo.Length); 
     output.Position = 0;   


     var fName = string.Format("File-{0}.pdf", DateTime.Now.ToString("s")); 
     Session[fName] = output; 

     return Json(new { success = true, fName }, JsonRequestBehavior.AllowGet); 

    } 

т.д.

другое Действие в Контоллере:

public ActionResult DownloadFile(string fName) 
     { 
      var ms = Session[fName] as MemoryStream; 
      if (ms == null) 
       return new EmptyResult(); 
      Session[fName] = null; 
      return File(ms, "application/pdf", fName); 
     } 

ответ

1

Используйте этот код для создания div с сообщением.

<div id="effect" class="ui-widget-content ui-corner-all">  
<p>Loading Files...</p> 
</div> 

Используйте функцию show, чтобы отобразить всплывающее окно внутри вашей функции javascript.

function getAllChecked() {$("#effect").show(selectedEffect, options, 500, callback);} 

И внутри успеха ajax скрыть всплывающее окно.

success: function (data) { 
      if (data.success) {$("#effect:visible").removeAttr("style").fadeOut();} 

надеюсь, что это поможет.

+0

Предложение: Вместо использования всплывающего окна, почему бы вам не использовать изображение загрузки gif, которое вы можете легко показать и скрыть. Вы можете показать изображение при создании кнопки отчета, щелкнув и спрятать внутри успеха ajax, используя простой jQuery. –

+0

Спасибо, он отлично работает :) – alenan2013