Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#MVC:Chrome使用动作名称设置内联PDF标题_C#_Asp.net Mvc_Google Chrome_Pdf - Fatal编程技术网

C#MVC:Chrome使用动作名称设置内联PDF标题

C#MVC:Chrome使用动作名称设置内联PDF标题,c#,asp.net-mvc,google-chrome,pdf,C#,Asp.net Mvc,Google Chrome,Pdf,我有一个在新浏览器选项卡中显示PDF的操作 public ActionResult Print() { var cd = new ContentDisposition { FileName ="something.pdf", Inline = true }; Response.AppendHeader("Content-Disposition", cd.ToStrin

我有一个在新浏览器选项卡中显示PDF的操作

    public ActionResult Print()
    {
        var cd = new ContentDisposition
        {
            FileName ="something.pdf",
            Inline = true 
        };
        Response.AppendHeader("Content-Disposition", cd.ToString());
        return File(reportResponse.Data.Document, MediaTypeNames.Application.Pdf);

    }
文件名工作正常。当我下载文件时,它的名称是“something.pdf”

问题是,当google chrome在新的浏览器选项卡中打开PDF时,它会将控制器操作名称(打印)显示为PDF的标题。这就是我想要改变的。我附上了一张照片以供澄清

查看代码:
Action(“Print”、“Controller”、new{area=“area”})、new{@target=“\u blank”}

尝试以下返回语句:

return File(reportResponse.Data.Document, MediaTypeNames.Application.Pdf, "something.pdf");

向操作方法传递文件名的参数,并确保参数名为'id'

查看代码:


Url.Action(“打印”、“控制器”、新的{id=“filename”、area=“area”})、新的{@target=“\u blank”}

我使用iframe解决了这个问题

创建一个填充标题和pdf url的操作

        public ActionResult ArticleSpecification(int ArticleID)
        {
            using (var context = new myEntities())
            {
                Article article = context.Article.FirstOrDefault(a => a.ArticleID == ArticleID);
                ViewData["Title"] = article.Code + " - " + article.Description;
                ViewData["PdfSource"] = "ArticleSpecificationPdf?ArticleID=" + article.ArticleID;
                return View("~/Views/Specification/pdfview.cshtml");
            }
        }
cshtml:使用iframe查看pdf和标题

@{
    Layout = "";
}
<!DOCTYPE html>
<html>
    <head>
        <title>@ViewData["Title"]</title>
        <style>
            html, body, iframe {
                height: 100%;
                width: 100%;
                margin: 0;
                border: 0;
            }
            body {
                overflow-y: hidden;
            }
        </style>
    </head>
    <body>
        <iframe src="@ViewData["PdfSource"]"></iframe>
    </body>
</html>

再加上科达达拉米的回答

当您从ASP.NET MVC传回PDF文件时,页面标题设置为用于到达控制器的路由配置的最后一个url部分

知道了这一点,您可以通过将参数设置为控制器路由配置的一部分来动态命名标题,例如:

        routes.MapRoute(
            "Print",
            "print/{pdfName}",
            new { controller = "Print", action = "Index", pdfName = UrlParameter.Optional }
        );
然后MVC将使用这个值,因为它认为它是一个单独的页面

在url中使用它作为 “/print/这是我的pdf标题”不是“/print?pdfName=这是我的pdf标题”

作为查询字符串参数,MVC将返回调用PDF“print”

注意: 如中所述

当文本位于查询字符串“?”字符之前时,IIS对禁止字符有更严格的规则。不允许使用
,*,%,&,:,\
()

这些字符中的任何一个,即使编码后也会给您一个“路径可能存在危险”'400错误

确保删除/替换这些禁止的字符


.

浏览器(至少是Chrome和Firefox)从pdf文档的标题元数据设置页面标题。在我的情况下,pdf是一个与其他内容内联显示的部分页面。在MVC中,标题设置为操作的名称。在我的情况下,我只是将操作名称更改为通用名称。仍然希望找到更好的解决方案。是否有机会在没有文件的情况下实现此操作名称为
id
attribute?我有一个数字id(例如1234),firefox/chrome都会用这些数字id而不是文件名来显示pdf。虽然设置了
Inline=true
,但您的代码段会下载pdf文件而不是内联显示。这会下载具有该名称的文件,而不是在浏览器中显示
        routes.MapRoute(
            "Print",
            "print/{pdfName}",
            new { controller = "Print", action = "Index", pdfName = UrlParameter.Optional }
        );