2009-04-13 6 views
2

私はDoddle Reportをテストして、IEnumerableオブジェクトからいくつかのレポートを生成します。私はこのようなリンクを生成する必要がありますasp.net MVCでファイルをダウンロードするためのリンクを生成するには?

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

質問はどうすればいいですか?

終了Doddle Reportを使用して、del ExcelをXML形式で生成します。

+0

生成したいこのリンクについてはどうですか?ちょうどURL、または実際のダウンロードリンク? –

+0

リンクを生成してから、コントローラでアクションを呼び出す必要があります。 –

答えて

15

このtutorialをチェックすると、別のアクション結果が返されます。

  • するViewResult - HTMLと マークアップを表します:

    ASP.NET MVCフレームワークは、以下を含むアクションの結果のいくつかのタイプをサポートしています。

  • EmptyResult - 結果を表しません。
  • RedirectResult - 新しいURLへのリダイレクト を表します。
  • JsonResult - をAJAXアプリケーションで使用するJavaScript Object Notationの結果を表します。
  • JavaScriptResult - JavaScriptスクリプトを表します。
  • ContentResult - テキストを表します。 結果。
  • FileContentResult - ダウンロード可能ファイル(バイナリ の内容)を表します。
  • FilePathResult - ダウンロード可能ファイルパス)を表します。
  • FileStreamResult - ダウンロード可能ファイル(ファイル ストリーム)を表します。多分そこ

    <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> 
    

    短い道が、これは動作します:多分このよう

+0

含まれているリンクが無効です。私が参照していたページはここで見つけることができると思います。 http://www.asp.net/mvc/tutorials/controllers-and-routing/aspnet-mvc-controllers-overview-cs – Carth

0

AFAIK、これはMVCでこれを行うことについて特別なことは何もありません。 PDFファイルを生成し、作成したファイルにリダイレクトするハンドラを使用して、フォームにLinkBut​​tonを作成します。

+0

その後、ファイルをブラウザで開くことができます** DOWNLOADABLE ** – Rzassar

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

これがセキュリティの問題につながる可能性があるのではないかと思いますか?私が ".. \ App_Data \ secretfile.mdf"のようなfileNameを持つコントローラを呼び出すと、セキュリティを迂回し、通常はアクセスできないディレクトリにアクセスできますか?もちろん、これはファイル名やサーバ上のどこにあるのか(あるいは多くの試行錯誤)に依存します。そうでない場合は素晴らしい解決策に見えます。 –

+0

ええ、あなたは正しいです、私は非常に速い例でしたが、あなたがダウンロードできるようにするフォルダに重要なファイルを置いてはいけないと考えても、ファイル全体をパラメータとして送信することは良い考えではありませんファイル。私は強制的に例を更新しました。txt =) –

+1

素敵でシンプルです。私はちょうどFileDownloadNameプロパティの設定を追加しなければならなかった、これは完璧な解決策でした – pjdupreez