2016-11-14 249 views
1

在我的應用程序中,我有一個文件夾結構,您可以上傳各種文件(jpg,png,pdf,txt等)。您可以直接下載它們作爲文件或者您可以在瀏覽器中查看該文件。ASP.Net MVC:在瀏覽器中顯示文件,在瀏覽器標籤中顯示文件名

要顯示在瀏覽器中的文件,我用的是如下因素控制器動作:

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.內容Dispostion頭

我發現幾個職位,他們說的內容處理標頭添加到與文件名的響應:

但這不起作用。

2.添加文件名,文件構造

return base.File(viewmodel.Data, viewmodel.MediaType, viewmodel.FileName); 

如果我這樣做,該文件是在瀏覽器中顯示代替下載。

3 PDF文件標題

我發現,有時候瀏覽器分頁標題是正確的!如果我在具有文件標題(標題爲pdf屬性,而不是文件名)的瀏覽器中顯示PDF文件,則瀏覽器標題是正確的: https://i.stack.imgur.com/orAZS.jpg

有人可以幫助我嗎?

+0

嘗試更改.cshtml頁面中的「ViewBag.Title」。 – Nitin

+0

直接返回文件時沒有.cshtml頁面。 –

+0

糟糕你是對的,我沒有看到它。你可以在你的控制器「ViewBag.Title」中試試這個。它可能工作。 – Nitin

回答

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

很遺憾,這是我發現這樣做的唯一方法。一般的經驗法則,「如果解決方案涉及IFrame,可能不是正確的解決方案。」 –

-2

設置在頭節你的標題標籤到您的文件名

<tatle>Filename</title> 
+0

您有更多擴展代碼示例?你能修改我的控制器動作嗎? –

-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); 
} 
+0

這不工作 –

0

什麼瀏覽器顯示爲標籤標題是URL的最後一部分(該瀏覽器已不知道什麼是你的控制器的名稱),所以你可以重新格式化您的網址是這樣的:

localhost/OnView.Web/Document/FileDisplay/1685/True/MyTabName 

然後標籤標題將爲MyTabName

但改變這種目的的整個URL模式也似乎是一個解決辦法...

旁註:我有同樣的問題,但我的網址是這樣的:FileDisplay/3?isFile=true,我的分頁標題是(在Chrome中,對於IE,標題標題是域)。

相關問題