2013-07-27 2 views
1

У меня есть это действие, выполняющее скачать здесь:asp.net MVC 4: Ajax вызов к контроллеру загрузки

[HttpGet] 
    public void Download(string FileName) 
    { 
     string FilePath = System.AppDomain.CurrentDomain.BaseDirectory + "Exe\\"; 

     System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; 
     response.ClearContent(); 
     response.Clear(); 
     response.ContentType = "video/mp4"; 
     response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + "); 
     response.TransmitFile(FilePath + FileName); 
     response.Flush(); 
     response.End(); 
    } 

в одном из моих взглядов я делает вызов Ajax к этому действию, как это: вариант Var = { url: 'Главная/Загрузить? Filename =' + file.Name + file.Extension, метод: 'GET' }; ?

$.ajax(options) 
    .done(function() { 
     console.log('You successfully downloaded ' + file.Name); 
    }) 
    .fail(function() { 
     console.log('Something bad happened'); 
    }); 

, когда я построить свой проект и перейти к/дома/загрузки ид = имя файла, все работает нормально и хорошо: хром начинает загрузку. НО, когда я делаю это, используя вызов ajax выше done, вызван обратный вызов, поэтому загрузка прошла успешно, но я не вижу загрузки в моем браузере (хром) в любом месте, и он не спрашивает меня, где разместить этот файл. во-первых, где этот файл фактически ушел? почему, когда я использую вызов ajax, он ведет себя по-другому?

Спасибо за помощь ур.

P.S. : переход от «get» к «post» не приводит к другому результату.

ответ

0

Вы не можете сделать это с помощью ajax.

Hovewer Thera много трюков, которые могут помочь вам:

  • перенаправлять всю страницу, чтобы загрузить адрес,
  • используя перенаправление скрытого IFRAME

Тех два методы для работы с, вы также можете попробовать использовать существующие jquery-плагины.

+0

это имеет смысл. после переосмысления его, с ajax он никогда не будет работать. – dafriskymonkey

+0

i can not redirect, его предполагается быть СПА :) – dafriskymonkey

0

браузер будет обрабатывать возвращаемые данные только как «данные». Вы можете просто вызвать диалог сохранения со скрытым iframe

<iframe id="#iframe" src="/home/download?id=filename"></iframe> 

$('#download').click(function(){ 
    $('#iframe').attr('src','/home/download?id=newfilename'); 
} 
Смежные вопросы