在Razor视图

时间:2017-09-25 20:44:32

标签: c# iframe razor asp.net-core-mvc asp.net-core-2.0

我正在创建一个简单的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 ...





< 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;

&#xA;&#xA;

//但失败了,因为扩展了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;

1 个答案:

答案 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");
}