2017-02-08 4 views
0

Я новичок в C#, и я хочу отобразить новый и динамически созданный PDF-файл на клиентской стороне веб-браузера на новой вкладке с использованием HttpResponseMessage.Показать PDF на новой вкладке после вызова ajax MVC C#

Созданный документ PDF действителен. Это мой код контроллера:

[HttpGet] 
    public HttpResponseMessage ShowPDF() 
    { 

     MemoryStream ms = new GetPDF(); 
     Byte[] bytes = ms.GetBuffer(); 

     HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); 
     Response.AppendHeader("Content-Disposition", "inline; filename=test.pdf"); 

     result.Content = new StreamContent(ms); 
     result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf"); 

     return result; 
    } 

После нажатия на кнопку на HTML странице, ничего не происходит, нет ошибок, но не новый PDF отображается слишком. Я пытался использовать как MemoryStream, так и Buffer, но ничего не работает.

EDIT

Вот мой взгляд код:

 <button id="GetPDF" class="btn btn-primary pull-right">GET PDF</button> 

Javascript:

$('#GetPDF').click(function (e) { 
     e.preventDefault(); 
     $.ajax({ 
      url: '@Url.Action("ShowPDF", "Controller")', 
      method: 'GET', 
      success: function (data, textStatus, jqXHR) { 
      //Showing something but what 
      }, 
      error: function (jqXHR, textStatus, errorThrown) { 
      //Showing error message 
      } 
     }); 
    }); 
+0

Какая кнопка? Вы не указали кнопку. Вы пробовали отлаживать код? Убедитесь, что ваш метод действия достигнут и т. Д.? – mason

+0

Я редактировал свое сообщение, и да, мой метод действия вызывается. – rvsntn

+0

ничего не происходит, по крайней мере частично, потому что вы ничего не делаете с результатом вашего айхакс-звонка. Если вы не пропустили содержание «успешного» обратного вызова в вашем примере? И хорошо, что ваш метод действия вызван, так что вы проверили, что в ответе определенно вернулось содержимое? – ADyson

ответ

0

Хорошо, мне удалось заставить его работать. Вот мое решение, я буду оптимизировать его завтра ...

Javascript:

 $('#GetPDF').click(function (e) { 
     window.open('@Url.Action("ShowPDF", "Controller")'); 
    }); 

Метод контроллера:

[HttpGet] 
    public ActionResult ShowPDF() 
    { 
     try 
     { 
      MemoryStream ms = new MemoryStream(GetPDF().ToArray()); 
      FileStreamResult filestream = new FileStreamResult(ms, "application/pdf"); 
      return filestream; 
     } 
     catch (Exception ex) 
     { 
      throw new Exception(); 
     } 
    } 

GetPDF возвращает MemoryStream, но закрыты. Вы должны получить элемент Byte [] с помощью ToArray(), а затем создать другой MemoryStream с помощью конструктора.

Большое спасибо Адисону и масону за помощь.

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

  • Нет связанных вопросов^_^