2011-09-12 43 views
6

Tôi đang tải một tập tin excel trong phương pháp C# hành động reutrns một FileResult, như thế này:ASP.NET MVC: Tải nộp excel

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

Khi tôi tự điều hướng đến URL tương ứng với ở trên phương pháp, sau đó tôi nhận được kết xuất đại diện của tập tin. Tệp sẽ không tải xuống bằng Lưu dưới dạng -dialog.

Có cách nào để buộc tải xuống xảy ra thông qua Lưu dưới dạng -dialog không?

-pom-

+0

Bạn có nhìn thấy điều này xảy ra trong một trình duyệt cụ thể? Và tại sao bạn không sử dụng loại MIME cho các tệp excel? –

+0

Hi Charles, bạn nói đúng, điều này chỉ xảy ra với Opera. Bây giờ tôi đã thử nghiệm với FF và Safari, ở đó tôi nhận được một hộp thoại lưu. – Pompair

Trả lời

5

Tôi có cảm giác bạn đang nhận được hành vi này do loại phương tiện bạn đang quay trở lại.

Hãy thử thay đổi loại phương tiện để ứng dụng/vnd.ms-excel như thế này:

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

bạn cũng có thể sử dụng điều này nếu là excel 2010 (xslx): application/vnd.openxmlformats-officedocument.spreadsheetml.sheet – Iridio

8

Thông thường khi bạn chỉ định một tên tập tin với phương pháp File nó tự động gắn thêm một tiêu đề Content-Disposition để hộp thoại Save-As luôn luôn hiển thị. Vì vậy, tôi hơi ngạc nhiên khi bạn nói rằng mã của bạn không hoạt động. Bạn cũng có thể cố gắng tự đặt tiêu đề này:

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

Typo là ở đó, nó phải là "Content-Disposition" –

+0

@Jared Peless, vâng, tôi vừa mới chú ý và sửa nó. –

4

Bạn có thể thử này:

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

Hope this helps.