我正在使用自定义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);
}
答案 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参数,因为只在客户端需要它。