FileResult не является подсказкой в mvc3
Я создаю приложение MVC 3 в версии 2010. Я пытаюсь скачать файл в архиве.
это мое действие в MVC. Пожалуйста, смотрите мой код.
//[HttpPost]
public FileResult Download(string url, string cnt)
{
if (!string.IsNullOrEmpty(url) && !string.IsNullOrEmpty(cnt))
{
return File(url, cnt);
}
else
{
return null;
}
}
<input type="button" id="@(Model.ControlID)_bio_view" class="changepasswordbutton" value="View" />
И я создаю функцию jQuery в моем файле.cshtml
function ViewFile(url, cnt) {
$.post('@(Url.Action("Download"))?url=' + url + '&cnt=' + cnt)
}
$('#@(Model.ControlID)_bio_view').click(function (e) {
ViewFile($('#bio_file_url').val(), $('#bio_file_url').attr("cnttype"));
});
Эта функция срабатывает правильно, когда я нажимаю кнопку Скачать. Но окно загрузки файла не запрашивается.
Пожалуйста помоги.
1 ответ
Решение
Нет, вы не можете загружать файлы, используя запрос AJAX. Вам нужно перенаправить браузер на целевой URL-адрес вместо отправки запроса AJAX:
function ViewFile(url, cnt) {
window.location.href = '@(Url.Action("Download"))?' +
'url=' + encodeURIComponent(url) +
'&cnt=' + encodeURIComponent(cnt);
}
Также имейте в виду, что File
Функция ожидает в качестве первого аргумента абсолютный физический путь к файлу, такой как:
public ActionResult Download(string url, string cnt)
{
if (!string.IsNullOrEmpty(url) && !string.IsNullOrEmpty(cnt) && File.Exists(url))
{
return File(url, cnt);
}
return HttpNotFound();
}
Также, если вы хотите запросить загрузку файла, вам нужно указать имя файла (третий аргумент функции File):
return File(@"c:\reports\foo.pdf", "application/pdf", "foo.pdf");