2015-03-25 2 views
0

У меня есть класс pdfExport, где я создаю pdf. В этом классе у меня есть методMVC & PDFSharp - сгенерированный PDF не загружается

public MemoryStream returnPDF() 
    { 
     using (MemoryStream stream = new MemoryStream()) 
     { 
      pdfRenderer.PdfDocument.Save(stream, false); 
      return stream; 
     } 

    } 

Мой контроллер выглядит следующим образом

 [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)] 
    public ActionResult Contingency_Report(List<int> ids) 
    { 
     pdfExport pdf = new pdfExport(ids); 

     MemoryStream stream = new MemoryStream(); 

     stream = pdf.returnPDF(); 
     return File(stream.ToArray(), "application/pdf", "contingency.pdf"); 

    } 

Как я могу видеть в Chrome (клавиша F12 нажата), то ответ возвращается в формате PDF (на вкладке Response), но файл недоступен для загрузки. Ничего не происходит, пока я не увижу результаты на вкладке «Ответ». Как сделать его доступным для загрузки? Я хочу, чтобы браузер спросил, где сохранить файл.

ответ

1

Я решил свою проблему. Если кто-то нуждается в помощи, есть то, что я сделал

Вид:

$(function() { 
    $("#btnCont").click(function() { 
     var idsToSend = []; 

     var grid = $("#grid_Edit").data("kendoGrid"); 
     var ds = grid.dataSource.view(); 

     for (var i = 0; i < ds.length; i++) { 
      var row = grid.table.find("tr[data-uid='" + ds[i].uid + "']"); 
      var checkbox = $(row).find(".checkbox"); 

      if (checkbox.is(":checked")) { 
       idsToSend.push(ds[i].ID); 
      } 
     } 

     //  alert(idsToSend); 

     // $.post("/Contigency/Contingency_Report", { ids: idsToSend}); 

     var url = ""; 
     url = server; 

     var getUrl = '@Url.Action("Download_Report", "Contigency")'; 

     $.ajax({ 
      url: url + "/Contigency/Contingency_Report", 
      type: 'post', 
      contentType: 'application/json', 
      data: JSON.stringify({ 
       ids: idsToSend 
      }), 
      success: function (d) { 
       if (d.success) { 
          window.location = getUrl + "?fName="+ d.fName; 
           } 
      }, 
      error: function() { 

      } 

     }) 
    }) 
} 

); 

И пост и получить методы

  public ActionResult Contingency_Report(List<int> ids) 
    { 
     MemoryStream workStream = new MemoryStream(); 

     pdfExport pdf = new pdfExport(ids); 

     workStream = pdf.returnPDF(); 

     workStream.Position = 0; 

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

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

    public ActionResult Download_Report(string fName) 
    { 
     var cd = new System.Net.Mime.ContentDisposition 
     { 
      FileName = fName+".pdf", 
      Inline = false, 
     }; 

     var stream = Session[fName] as MemoryStream; 
     if (stream == null) 
      return new EmptyResult(); 

     Session[fName] = null; 

     Response.AppendHeader("Content-Disposition", cd.ToString()); 

     return File(stream, System.Net.Mime.MediaTypeNames.Application.Pdf); 
    } 

Вот так!

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