2009-12-10 4 views
4

У меня есть следующая проблема: У меня есть приложение MVC, в некоторых действиях какого-то контроллера я создаю файл PDF, файл генерируется по определенному пути на сервере. Это действие вызывается по ссылке действия представления, когда пользователь нажимает на эту ссылку, действие, сгенерированное в этом PDF-файле, все прекрасно до сих пор. Я хочу страницу, чтобы показать диалоговое окно с моим сгенерированным файлом PDF, который говорит:MVC открыть файл pdf

Открыть - Сохранить - Отменить (диалог типичных файлов при щелчке на файл)

Но без обновления страницы, только показать когда пользователь щелкнул ссылку.

Как я мог это сделать? что действие должно вернуться к представлению? Спасибо.

ответ

3

Чтобы предоставить диалоговое окно «Открыть-Сохранить-Отменить», вам нужно будет установить соответствующие заголовки ответов, а, как говорит @RichardOD, вернуть FilePathResult или FileStreamResult.

HttpContext.Response.AddHeader("content-disposition", "attachment; 
           filename=form.pdf"); 

return new FileStreamResult(fileStream, "application/pdf"); 
+0

'FileStreamResult' и' FilePathResult' оба имеют свойство 'FileDownloadName', которое вы должны использовать вместо m устанавливая заголовок '' content-disposition ''. –

0

Try что-то вроде этого

public class PdfResult : ActionResult 
    { 
     //private members 
     public PdfResult(/*prams you need to generate that pdf*/) 
     public override void ExecuteResult(ControllerContext context) 
     { 
      //create the pdf in a byte array then drop it into the response 
      context.HttpContext.Response.Clear(); 
      context.HttpContext.Response.ContentType = "application/pdf"; 
      context.HttpContext.Response.AddHeader("content-disposition", "attachment;filename=xxx.pdf"); 
      context.HttpContext.Response.OutputStream.Write(pdfBytes.ToArray(), 0, pdfBytes.ToArray().Length); 
      context.HttpContext.Response.End(); 
     } 
    } 

Тогда и только возвращающие PdfResult

Подсказка: Я получил общий класс для этого, и это что-то вроде этого, и я использую NFop

public PdfResult(IQueryable source, Dictionary<string,int> columns, Type type) 
    { 
     Source = source; 
     Columns = columns; 
     SourceType = type; 
    } 
Смежные вопросы