动态设置页面标题

时间:2014-01-28 09:53:40

标签: c# asp.net-mvc asp.net-mvc-3 web.config-transform

我想设置返回PDF文件流的网页标题:

public ActionResult PrintInvoice(long ID)
{
    var data = db.Documents.Where(x => x.InvoiceNumber == ID);
      ReportDocument rd = new ReportDocument();
      rd.Load(Server.MapPath("~/Reports/InvoiceDocument.rpt"));

    Stream stream = rd.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
    stream.Seek(0, SeekOrigin.Begin);
    return new FileStreamResult(stream, "application/pdf");               //For Showing PDF in Browser itself
}

在这个页面上我想设置标题。

如何在此页面上设置标题。

目前,页面上的标题如下图所示:

enter image description here

2 个答案:

答案 0 :(得分:0)

查看HTTP标头,例如thread

尝试类似:

Response.AppendHeader("Content-Disposition", "inline; filename=your page title");

另请查看推荐的thread

return File(stream, "application/pdf", "your page title");

请注意,此类数据的执行方式可能与其他浏览器不同。

答案 1 :(得分:0)

这就是我最终根据自己的情况做的事情。

下面的控制器代码包含两个动作。第一个操作返回一个我可以用来设置页面标题的模型(根据您的用例,它可以只是一个字符串)。第二个动作是获取文件内容。就我而言,我将文件内容存储在数据库中,因此我使用id来获取文档。

第二个操作还设置了响应头,以便当他们尝试下载文件时正确显示文件名。

    public IActionResult PreviewDocument(int id)
    {
        Document document = _legislationFolderService.GetDocument(id);

        if (document == null)
            return NotFound($"Could not find document with id of {id}");

        return View(document);
    }

    public IActionResult PreviewDocumentContents(int id)
    {
        DocumentContents documentContents = _legislationFolderService.GetDocumentContents(id);

        if (documentContents == null)
            return NotFound($"Could not find contents for document with id of {id}");

        Response.Headers.Add("Content-Disposition", $"inline; filename={documentContents.Document.Name}.pdf");
        return new FileStreamResult(new MemoryStream(documentContents.Contents), "application/pdf");
    }

在下面的视图中(PreviewDocument.cshtml),我使用iframe填充页面并链接到PreviewDocumentContents操作。我不希望主模板中包含布局,因此我将其设置为null并为页面建立了基本的html结构,在其中将标题设置在html中。

@model EFloorFiles.Service.Models.Document

@{
    Layout = null;
    ViewBag.Title = Model.Name;
}

<!DOCTYPE html>

<html>
<head>
    <meta charset="utf-8" />
    <title>@ViewData["Title"] - E-Floor Files</title>
    <style type="text/css">
        body, html {
            width: 100%;
            height: 100%;
            overflow: hidden;
            margin: 0;
        }

        iframe {
            width: 100%;
            height: 100%;
            border: none;
        }
    </style>
</head>
<body>
    <iframe src="@Url.Action("PreviewDocumentContents", new { id = Model.Id })"></iframe>
</body>
</html>