2009-04-13 3 views
2

Я тестирую Doddle Report, чтобы сгенерировать несколько отчетов, представляющих объект IEnumerable. Мне нужно сгенерировать ссылку вроде этогоКак создать ссылку для загрузки файла в asp.net MVC?

PDF - http://myserver.com/reports/ProductsReport.pdf 

Вопрос: как это сделать?

Ru Остановить использование отчета Doddle Report и сгенерировать Del Excel в формате XML.

+0

Как насчет этой ссылки, которую вы хотите сгенерировать? Просто URL или фактическая ссылка для скачивания? –

+0

Мне нужно сгенерировать ссылку, а затем вызвать действие в моем контроллере. –

ответ

15

Отметьте это tutorial, чтобы вернуть результат действия.

Структура ASP.NET MVC поддерживает несколько типов результатов действия, включая:

  • ViewResult - Представляет HTML и разметку.
  • EmptyResult - не представляет результата.
  • RedirectResult - представляет перенаправление на новый URL-адрес.
  • JsonResult - представляет собой JavaScript Результат представления объекта, который может быть , используемый в приложении AJAX.
  • JavaScriptResult - представляет собой скрипт JavaScript .
  • ContentResult - представляет текст результат.
  • FileContentResult - представляет загружаемый файл (с двоичным содержимым ).
  • FilePathResult - Представляет загружаемый файлпути).
  • ФайлStreamResult - представляет загружаемый файл (с файлом stream).
+0

Включенная ссылка мертва. Я думаю, что страницу, на которую он ссылался, можно найти здесь. http://www.asp.net/mvc/tutorials/controllers-and-routing/aspnet-mvc-controllers-overview-cs – Carth

0

AFAIK, нет ничего особенного в том, чтобы делать это в MVC. Создайте LinkButton в своей форме с обработчиком, который создает файл PDF, а затем перенаправляет его на созданный файл.

+0

Затем файл можно открыть в браузере, а не делать его ** ЗАГРУЗИТЬ ** – Rzassar

0

Что-то вроде этого, может быть:

<h2>List Of Reports</h2> 
<ul> 
    <% foreach (var report in Model){ %> 
     <li><a href="<%= Html.BuildUrlFromExpression<ReportController>(r => r.Reports(report.Filename)) %>"><%=report.Filename %></a></li> 
    <% } %> 
</ul> 

Там может быть более короткий путь, но это работает.

4

Я сделал что-то подобное, что вы хотите на MVC 5, и я использовал FilePathResult, как сказал J.W.

cshtml:

@Html.ActionLink("Download Here", "DownloadExampleFiles", "Product", new { fileName = "variation-example" }, new { @target = "_blank" }) 

ProductController:

public FilePathResult DownloadExampleFiles(string fileName) 
{ 
    return new FilePathResult(string.Format(@"~\Files\{0}", fileName + ".txt"), "text/plain"); 
} 

Скачать файл выглядит очень глупо/легко, однако, для тех, кто новичок в MVC, это не так. Этот подход кажется лучшим при использовании MVC.

PS: Я сделал файл .txt как пример. Вы должны сделать то, что вам интересно, чтобы получить конкретный файл.

+0

Мне интересно, может ли это привести к проблеме безопасности? Если я вызову контроллер с именем fileName, похожим на «.. \ App_Data \ secretfile.mdf», это позволит мне обойти защиту и получить доступ к каталогу, к которому я обычно не мог получить доступ? Конечно, это будет полагаться на знание имен файлов и где они находятся на сервере (или много проб и ошибок). Похоже на хорошее решение. –

+0

Да, вы правы, я сделал это очень быстро, как пример, но это не очень хорошая идея, чтобы отправить весь файл в качестве параметра, хотя я считаю, что у вас не должно быть важных файлов в папке, которую вы разрешаете пользователям загружать файлы. Я обновил пример с принудительным .txt =) –

+1

приятным и простым. Мне просто пришлось добавить настройку свойства FileDownloadName, и это было отличное решение – pjdupreez

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