1

我有一个页面上显示的文件列表:

PDF1, PDF2, PDF3, ...

 @model IEnumerable<System.IO.FileInfo>
 @foreach (var file in Model)
 {
     <li class="list-group-item">
         <u>
             <a asp-controller="File" asp-action="DisplayFile">@file.Name</a>
         </u>
     </li>
 }

如您所见,我在这里使用 FileInfo 类作为模型。

我想要实现的是当我单击它的名称时在浏览器中显示的文件:

PDF1 点击 -> 显示 PDF1

[HttpGet]
public IActionResult DisplayFile()
{
    return new PhysicalFileResult(@"C:\MyProject\UploadedFiles\PDF1.pdf", "application/pdf");
}

我面临的两个问题:

  1. 这显然很容易提供文件的链接,但我希望这是动态的:

    return new PhysicalFileResult(dynamically_chosen_file, "application/pdf");
    

    所以点击 PDF2 -> 显示 PDF2、PDF3 -> PDF3 等等。

    我试图遍历文件夹并将所有文件放入列表中,但仍然不确定下一步应该是什么。

  2. PDF 显示在不同的视图中 - 任何制作方式都显示在同一视图中?阅读有关使用 iframe 的内容,但不太清楚如何处理它们。

任何帮助将不胜感激,谢谢。

4

1 回答 1

0

您可以将查询字符串发送到您的操作,以根据输入选择文件。像这样的东西

[HttpGet]
public IActionResult DisplayFile(string filename)
{
    return new PhysicalFileResult(@"C:\MyProject\UploadedFiles\"+filename, "application/pdf");
}

您的 html 文件应更改为此向您的操作发送查询字符串:

 @model IEnumerable<System.IO.FileInfo>
 @foreach (var file in Model)
 {
     <li class="list-group-item">
         <u>
             <a asp-controller="File" asp-action="DisplayFile?filename=@file.Name">@file.Name</a>
         </u>
     </li>
 }

对于动态视图,请尝试返回FileStream而不是PhysicalFileResult 这样:

public IActionResult DisplayFile(string filename)
{
    var stream = new FileStream(@"C:\MyProject\UploadedFiles\"+filename, FileMode.Open);
    return new FileStreamResult(stream, "application/pdf");     
}
于 2019-11-09T11:55:44.953 回答