2011-09-12 123 views
6

我下載一個Excel C#操作方法內提交reutrns一個FileResult,像這樣:ASP.NET MVC:下載一個Excel文件

return File(bindata, "application/octet-stream", "mytestfile.xls"); 

當我手動導航到與上述相對應的URL方法,然後我得到該文件的渲染表示。該文件不會使用另存爲-dialog進行下載。

有沒有辦法強制通過另存爲-dialog進行下載?

-pom-

+0

你看到這種情況發生在一個特定的瀏覽器?爲什麼你不使用MIME類型的Excel文件? –

+0

嗨查爾斯,你是對的,這隻發生在Opera上。現在我用FF和Safari進行測試,在那裏我得到一個保存對話框。 – Pompair

回答

5

我有一種感覺,你正在得到這種行爲,因爲你正在返回的媒體類型。

試着改變媒體類型的應用程序/ vnd.ms - Excel中是這樣的:

return File(bindata, "application/vnd.ms-excel", "mytestfile.xls"); 
+1

你也可以使用這個如果是一個Excel 2010(xslx):application/vnd.openxmlformats-officedocument.spreadsheetml.sheet – Iridio

8

通常,當您指定的文件名添加到File方法,它會自動附加一個Content-Disposition頭,這樣的另存爲對話框始終顯示。所以當你說你的代碼不起作用時,我有點驚訝。您也可以嘗試手動設置這個頭:

Response.AppendHeader("Content-Disposition", "attachment; filename=mytestfile.xls"); 
+0

Typo在那裏,它必須是「Content-Disposition」 –

+0

@Jared Peless,是的,我剛剛注意到並修復了這個問題。 –

4

你可以試試這個:

return new FileContentResult(bindata, "application/vnd.ms-excel") 
      { 
       FileDownloadName = "mytestfile.xls") 
      }; 

希望這有助於。