Я не могу сделать проект и попробовать библиотеку Excel прямо сейчас, так как я на работе, поэтому я просто делаю это очень быстро.
Для начала, я думаю, вы можете получитьот использования ajax
полностью.Что всегда хорошо, потому что кода меньше для поддержки, вы можете использовать обычный тег привязки:
<a href="@Url.Action("GetExcelDocument", "MyController", new {id = Model.ExcelFileId})">Download</a>
Это не будет перенаправлять страницу, потому что браузер должен интерпретировать тип content-disposition / Mime, ипросто скачайте файл.
Затем вы можете попытаться вернуть файл следующим образом, где вы сначала читаете файл (в данном случае в stream
, но вы можете сделать это как byte[]
, а такжеFile
имеет перегрузку для него), а затем верните его через контроллер, используя File
и FileResult
.
Например:
public FileResult GetExcelDocument(int id)
{
string filePath = GetPathToDocumentWithId(id); //However you get the excel file path
return File(System.IO.File.OpenRead(filePath),
System.Web.MimeMapping.GetMimeMapping(filePath),
"filename.xlsm");
}
This веб-сайт сообщает, что тип содержимого / MIME для .xlsm - это "application / vnd.ms-excel.sheet.macroEnabled.12", но я думаю, что GetMimeMapping
должно работать.
При желании, если вы хотитеДля загрузки файла в новой вкладке вы можете установить target
тега привязки на «_blank», и он должен открыть новую вкладку и загрузить туда файл.
Дайте мне знать, каков результат.
Если вы используете JQuery и ajax, я нашел следующий примервдоль вашей предыдущей попытки:
С Здесь
var $idown; // Keep it outside of the function, so it's initialized once.
downloadURL : function(url) {
if ($idown) {
$idown.attr('src',url);
} else {
$idown = $('<iframe>', { id:'idown', src:url }).hide().appendTo('body');
}
},