Я возвращаю результат файла из действия, вызванного событием публикации формы.
Я не могу получить диалог загрузки. Вместо этого, если я использую:
return File(Encoding.UTF8.GetBytes(reportPath), "text/plain", "Report.csv");
Я получаю путь к файлу при выполнении ajax в целевом div.
Когда я использую
return File(reportPath, "text/plain", "Report.csv");
Я получаю содержимое файла в целевом div.
Действие объявлено как
[HttpPost]
public virtual ActionResult ExportFilter(Model model) {
string outputFile = CreateReport(model);
return File(....)
}
Форма отправляется через Ajax.BeginForm (...).
EDIT
Немного больше информации: моя форма имеет 2 кнопки отправки. Один используется для представления результата в целевом div, другой - для экспорта результата. Актон тот же, и я использую его, чтобы определить, какая кнопка вызвала событие:
[HttpPost]
public virtual ActionResult Run( model )
{
var bExecute = !string.IsNullOrEmpty(Request.Form["execute"]);
return bExecute ? Execute(model) : Export(model);
}
[HttpPost]
public virtual ActionResult Execute( model )
{
....
return PartialView("Report", model);
}
[HttpPost]
public virtual FileResult Export( model ) {
.....
return File(....)
}
После некоторых ответов я попытался перенаправить на действие Get, используя:
....
return RedirectToAction( MVC.Report.OfferDownload(ReportFile) );
}
[HttpGet]
public virtual FileResult OfferDownload(string FileName)
{
return File(FileName, "text/csv", "Report.csv");
}
Однако это не помогло.
Я также пытался транслировать файл, но это тоже не помогло.
EDIT2
Определенно проблема Ajax, потому что она работает, когда я заменяю Ajax.BeginForm на Html.BeginForm. Одно из решений, которое я имею в виду, - это использование события onclick для кнопок отправки для изменения атрибутов формы.