打开PDF重用代码

本文关键字:代码 PDF 打开 | 更新日期: 2023-09-27 18:06:51

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

My Index View:

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

My Controller Method:

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

打开PDF重用代码

未经测试,我没有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过载是:文本,动作,控制器,routeValues,属性-没有null,它会选择错误的过载。

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

可能不想列出你所有的pdf文件在服务器上的C:'…你可以使用Server.MapPath来定位一个文件夹在你的应用程序(然后它不重要,如果你的网站移动)

很可能有一个重载返回文件来指定路径,所以你不需要先打开它,它会为你正确地处理它等,我已经使用了与问题中提供的相同的代码。