动态使用页面标题

时间:2014-01-29 09:48:22

标签: c# asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 razor

我想在我的MVC应用程序中动态使用Title。因为我没有返回View而不是我将PDF报告返回为:

  public ActionResult PrintInvoice(long ID)
    {
        var data = db.Documents.Where(x => x.InvoiceNumber == ID);
        ReportDocument rd = new ReportDocument();
        rd.ParameterFields["DocumentID"].CurrentValues.IsNoValue = true;
        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

    }

我在表单中获取页面标题,

Page Title shown by Default

但我想在这里更改页面标题。 如何从MVC的动作本身动态更改页面标题?

3 个答案:

答案 0 :(得分:1)

我认为你真的不能。您没有将html /文本响应发送回浏览器,而是发送应用程序/ pdf响应。在大多数情况下,浏览器甚至不会打开选项卡。 (它快速打开和关闭)。页面标题是html / text响应的一部分,但由于你没有..

答案 1 :(得分:0)

有一个小技巧可以完成这项要求。您可以在页面中使用iFrame,iFrame可以处理文件下载。

主要行动 -

    public ActionResult Index()
    {
        return View();
    }

主视图 -

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<iframe src="@Url.Action("FileDownload")"></iframe>

FileDownload Action -

public ActionResult FileDownload()
{
    return File(System.IO.File.ReadAllBytes(Server.MapPath("~/rami.pdf")), System.Net.Mime.MediaTypeNames.Application.Octet, "rami.pdf");
}

对于iFrame的小样式,您可以在主视图上完全合并它。您可以在此处设置主视图的标题,iframe操作将触发下载。

对于动态下载,您可能需要将一些信息传递给iframe src,这可能是一个查询字符串,将由FileDownload操作使用,并将提示下载该相应文件。

答案 2 :(得分:0)

正如其他人所指出的那样,你没有归还文件,而是要归还文件。

我建议使用ajax来实际在后台执行下载。有关更多信息,请参阅this question and answer(s)。在这种情况下,它是一个Excel文档,但这对您的用例没有任何影响。