我想在我的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
}
我在表单中获取页面标题,
但我想在这里更改页面标题。 如何从MVC的动作本身动态更改页面标题?
答案 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文档,但这对您的用例没有任何影响。