【问题标题】:Open PDF reusing code打开 PDF 重用代码
【发布时间】:2015-08-07 20:58:45
【问题描述】:

如何在我的 asp.net mvc 网站中打开 pdf?但是重用代码,而我没有。我不想对每个 pdf 都这样做,所以我想重用代码。

我的索引视图:

<p>@Html.ActionLink("Historia.pdf", "ObtenerPdf", "Home")</p>

我的控制器方法:

public FileStreamResult ObtenerPdf()
{
    FileStream fs = new FileStream("c:\\Historia.pdf", FileMode.Open, FileAccess.Read);
    return File(fs, "application/pdf");
}

【问题讨论】:

    标签: c# asp.net-mvc pdf


    【解决方案1】:

    未经测试,我面前没有 VS 可以检查。


    总而言之,您需要在您的 DownloadPdf 操作中添加一个参数,并将其与操作链接一起传递。

    这是列出所有 PDF 的一些代码(Q 使用 C:\,所以这也是如此,请参阅注释),将它们显示给用户并下载。

    控制器:

    public ActionResult Index()
    {
        var files = System.IO.Directory.GetFiles(@"C:\", "*.pdf")
                        .Select(x => System.IO.Path.GetFileNameWithoutExtension(x))
                        .ToList();
        return View(files);
    }
    
    public FileStreamResult ObtenerPdf(string file)
    {
        FileStream fs = new FileStream("c:\\" + file + ".pdf", FileMode.Open, FileAccess.Read);
        return File(fs, "application/pdf");
    }
    

    查看:

    @model IList<string>
    
    @foreach (var file in Model)
    {
        <p>@Html.ActionLink(file, "ObtenerPdf", "Home", new { file }, null)</p>
    }
    

    几个笔记:

    Directory.GetFiles 包含路径 - 还有其他方法可以获取不包含路径的文件列表。

    ActionLink 重载是:文本、动作、控制器、路由值、属性 - 如果没有 null,它将选择错误的重载。

    在new { file } 中,如果你不指定名称,它将使用变量名,你可以具体匹配动作上的参数名称,这样会更健壮,即:new { file = file },但一些优化器会突出显示这一点。

    您可能不想在服务器上的 C:\ 上列出所有 PDF...您可以使用 Server.MapPath 在您的应用程序中找到一个文件夹(然后它不会无论您的网站是否移动)

    return File 很可能会超载指定路径,因此您无需先打开它并为您正确处理它等,我使用了与问题中提供的代码相同的代码。

    【讨论】:

      猜你喜欢
      • 2017-04-25
      • 2015-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-08
      • 2015-08-09
      相关资源
      最近更新 更多