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");
Другие вопросы по тегам