打开PDF重用代码

时间:2015-08-07 20:58:46

标签: c# asp.net-mvc pdf

如何在我的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");
}

1 个答案:

答案 0 :(得分:0)

未经测试,我没有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重载是:text,action,controller,routeValues,attributes - 如果没有null,它将选择错误的重载。

new { file }中如果您没有指定名称,它将使用变量名称,您可以专门匹配更强大的操作上的参数名称,即:{{1但是一些优化者会强调这一点。

可能想要在服务器上的C:\上列出所有PDF ...您可以使用new { file = file }在您的应用程序中找到一个文件夹(然后如果您的网站移动并不重要)

返回文件很可能超载以指定路径,因此您不需要先打开它并为您正确处理它等等,我使用了相同的代码在问题中提供。