我正在创建一个简单的CSHTML视图,以在ASP.NET Core 2.0 MVC Web应用程序中显示PDF文件。 PDF文件的本地URL存储在数据库中,并传递给ViewData中的视图。我试图在Razor视图文件中使用iframe,embed和object语句打开并查看PDF文件,但所有尝试只生成一个空框架,除非我在视图文件中硬编码本地URL。如果我在视图文件中对URL进行硬编码,则每次都有效。它只在我尝试在ViewData中传递本地URL时失败(见下文)。


示例测试控制器代码
&# xA;
 //设置ViewData值进行测试。
// ViewData [“ArticleURL” ] = article.LinkToArticle; //注释用于测试。
ViewData [“ArticleURL”] =“/ Article / test.pdf”; // PDF文件的本地URL。
示例CSHTML代码:


//适用于iframe,在视图中对SRC进行硬编码...


 < iframe src =“〜/ Articles / test。 pdf“>< / iframe>
//但失败了,因为展开的ViewData ...

&#xA ; < iframe src =“@ ViewData [”ArticleURL“]”>< / iframe>
//这个适用于嵌入式,在视图中使用SRC进行硬编码...


 < embed src =“〜/ Articles / test.pdf”type =“application / pdf “/>
//但是失败了,因为展开的ViewData ...
&#xA;&#xA;< code>&lt; embed src =“@ ViewData [”ArticleURL“]”type =“application / pdf”/&gt;
&#xA;&#xA;//这适用于对象,在视图中硬编码DATA ...
&#xA;&#xA; &lt; object data =“〜/ Articles / test.pdf”type =“application / pdf” &gt;&lt; / object&gt;
//但失败了,因为扩展了ViewData ...
&#xA;&#xA; < p>&lt; object data =“@ ViewData [“ArticleURL”]“type =”application / pdf“&gt;&lt; / object&gt;
&#xA;&#xA; 什么会阻止@ViewData正确扩展到表示Object,Embed或IFrame标签中本地URL的字符串?
&#xA;&#xA;注意:我在调试中检查了ViewData值,它包含在运行时执行embed,iframe和object语句时的本地URL,但视图仅显示空框架,并且不会生成任何错误或警告。有任何想法吗?提前感谢您的帮助和耐心!
&#xA;答案 0 :(得分:0)
我可以通过切换到iframe并使用@ Url.Action从数据库中检索PDF路径名来解决此问题。 (见下文)
CSHTML查看代码:
<iframe src="@Url.Action("ReadArticle", new { id = id })" width="800" height="600">
</iframe>
然后,在控制器中,我添加了以下操作:
控制器代码:
public FileStreamResult ReadArticle(int id)
{
Article article = _context.Articles
.Where(a => a.ID == id)
.AsNoTracking()
.SingleOrDefault();
var pdfPath = article.OriginalArticlePathname;
FileStream fs = new FileStream(pdfPath, FileMode.Open, FileAccess.Read);
return File(fs, "application/pdf");
}