如何在我的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");
}
答案 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 }
在您的应用程序中找到一个文件夹(然后如果您的网站移动并不重要)
返回文件很可能超载以指定路径,因此您不需要先打开它并为您正确处理它等等,我使用了相同的代码在问题中提供。