在特定页面的浏览器中打开PDF

时间:2015-04-21 14:11:19

标签: asp.net-mvc url razor

我正在使用自定义html助手@Html.ActionLink来查找PDF文件并将其返回到浏览器并在新标签页中打开。我现在遇到的问题是当我试图在特定页面上打开PDF时。

当没有尝试指定要打开的PDF的页面参数时,找到,返回并打开文件就好了。因此,我的设置参数的方法一定存在问题。

根据Adobe文档,#page=?参数可以附加到URL的末尾,以在特定页面上打开PDF。但是,我这样做的方法不起作用。

请参阅有关主题here.

的Adobe文档

正在使用Razor助手:

@Html.FileLink("Document Link", "\\MyLocation\\MyDocument.pdf", "4", new { @target = "_blank" })

帮助方法:

public static MvcHtmlString FileLink(this HtmlHelper helper, string LinkText, string FilePath, string PageNumber, object htmlAttributes = null)
{
    return helper.ActionLink(LinkText, "ShowFile", "Home", new { path = System.Uri.EscapeDataString(FilePath), page = PageNumber }, htmlAttributes);
}

ShowFile方法:

public ActionResult ShowFile(string path, string page)
{
    // My attempt at passing and setting the page parameter!
    path = System.Uri.UnescapeDataString(path + "#page=" + page);

    // Get actual path to file, file name
    var filePath = string.Format("{0}{1}", ConfigurationManager.AppSettings["DocumentsRoot"], path);

    // Get MIME type
    var contentType = MimeMapping.GetMimeMapping(path);

    // Return file
    return File(filePath, contentType);
}

1 个答案:

答案 0 :(得分:1)

adobe文档中的page参数是一个锚标记(例如#page=5),而不是查询字符串参数(?page=5)。您可以使用不同的ActionLink覆盖来同时指定:

Html.ActionLink(LinkText, "ShowFile", "Home", null, null, "page=" + PageNumber, 
    new { path = System.Uri.EscapeDataString(FilePath) }, null)

这将生成一个看起来像......

的链接
  

/Home/ShowFile?path=myfilename.txt#page=5

而不是

  

/Home/ShowFile?path=myfilename.txt&page=5

然后,您可以从ShowFile方法中删除page参数,因为只在客户端需要它。