在我的应用程序中,我有一个文件夹结构,您可以上传各种文件(jpg,png,pdf,txt等)。您可以将它们直接下载为文件,也可以在浏览器中查看该文件。
要在浏览器中显示文件,我使用以下控制器操作:
public virtual ActionResult FileDisplay(int fileId, bool isFile)
{
var viewmodel = _presenter.GetDocumentDisplayViewModel(fileId, isFile);
return base.File(viewmodel.Data, viewmodel.MediaType);
}
该文件在浏览器中显示如下: https://i.stack.imgur.com/TXmTy.jpg
浏览器标签显示我的控制器名称“FileDisplay”和(对于此示例)图像的尺寸。
问题: 如何在浏览器选项卡标题中显示文件名而不是控制器名称?这适用于所有文件类型。
1。内容处置标题
我找到了几个帖子,他们说要将Content-Disposition标头添加到带有文件名的响应中:
但这不起作用。
2。将文件名添加到文件构造函数
return base.File(viewmodel.Data, viewmodel.MediaType, viewmodel.FileName);
如果我这样做,则下载文件而不是在浏览器中显示。
第3。 PDF文件标题
我发现有时浏览器标签标题是正确的!如果我在浏览器中显示具有文件标题的PDF文件(标题为pdf属性,而不是文件名),则浏览器标题是正确的: https://i.stack.imgur.com/orAZS.jpg
有人可以帮我这个吗?
答案 0 :(得分:1)
现在解决方法:
我使用全屏iframe创建了一个新动作和视图,因此我可以设置此容器视图的标题。 IFrame源直接调用我的文件。
public virtual ActionResult FileDisplay(string fileName, int fileId, bool isFile)
{
var viewModel = new IFrameDocumentDisplayViewModel
{
FileName = fileName,
FileId = fileId,
IsFile = isFile
};
return PartialView("IFrameFileDisplayView", viewModel);
}
public virtual ActionResult GetFile(int fileId, bool isFile)
{
var viewmodel = _presenter.GetDocumentDisplayViewModel(fileId, isFile);
return base.File(viewmodel.Data, viewmodel.MediaType);
}
@model OnView.Models.ViewModels.Document.IFrameDocumentDisplayViewModel
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>@Model.FileName</title>
</head>
<body>
<iframe style="border: 0; position:absolute; top:0; left:0; right:0; bottom:0; width:100%; height:100%" src="@Html.Raw(Url.Action("GetFile", "Document", new { fileId = Model.FileId, isFile = Model.IsFile}))"></iframe>
</body>
</html>
所以现在我可以设置页面标题。但我仍然很好奇如何在没有IFrame的情况下完成它。
答案 1 :(得分:0)
浏览器显示为标签标题的是URL的最后一部分(浏览器不知道您的控制器名称是什么),因此您可以重新格式化您的网址:
localhost/OnView.Web/Document/FileDisplay/1685/True/MyTabName
然后标签标题为 MyTabName 。
但为此目的更改整个URL架构似乎也是一种解决方法......
旁注:我有同样的问题,但我的网址是这样的:FileDisplay/3?isFile=true
我的标题标题是 3 (在Chrome中。对于IE,标签标题是域名)
答案 2 :(得分:-1)
试试这个: -
public virtual ActionResult FileDisplay(int fileId, bool isFile)
{
var viewmodel = _presenter.GetDocumentDisplayViewModel(fileId, isFile);
ViewBag.Title= viewmodel.FileName;
return base.File(viewmodel.Data, viewmodel.MediaType);
}
答案 3 :(得分:-2)
将标题中的标题标记设置为文件名
<tatle>Filename</title>