2016-10-09 1 views
0

Je sais qu'il semble préférable d'utiliser un appel normal plutôt qu'un appel AJAX mais pour une raison quelconque, afficher un message d'erreur sur un dialogue modal en cas de problème lors du téléchargement, je dois télécharger un fichier en utilisant un appel AJAX. Voici ce que je l'ai enfin, après beaucoup d'essais:Est-il impossible de télécharger un fichier via un appel AJAX dans ASP.NET MVC5?

Vue:

<a href="javascript:downloadFile()">Download</a> 


function downloadFile() { 
    $.ajax({ 
     type: 'POST', 
     url: '/Experiment/GetFile', 
     data: '{id:' + 8 + '}', //For test purpose I used static id 
     contentType: 'application/json; charset=utf-8', 
     dataType: 'json', 
     success: function (returnValue) { 
      window.location = '/Experiment/GetFile?id=' + returnValue; 
     } 
    }); 
}; 

Controller:

dans le contrôleur, j'ai une méthode quelque chose comme ça, mais Je suis vraiment confus si je devais faire la même méthode pour AJAX Post et la méthode de succès ou non.

[HttpPost] 
public ActionResult GetFile(int id) 
{ 
    var dataContext = repository.FileAttachments.FirstOrDefault(m => m.Id == id); 
    if (dataContext == null) 
    {  
     return Json(new { success = true, returnValue = "8" }); 
    } 
    else 
    { 
     return Json(new { success = false, message= "Error..." }, JsonRequestBehavior.AllowGet); 
    } 
} 

Y at-il une approche intelligente pour effectuer cette opération à l'aide dosnload appel AJAX dans ASP.NET MVC5?

+0

Son ne sait pas ce que le point de c'est et pourquoi vous pensez que vous avez besoin d'un appel ajax (et juste utiliser 'data: {id: 8}' et supprimer 'contentType: 'application/json; charset = utf-8',') –

+0

** 1) ** En fait, j'utilise AJAX appel pour toutes les actions dans mon projet MVC et l'une des principales raisons pour lesquelles je voulais utiliser AJAX est d'afficher le message d'erreur renvoyé par le contrôleur en tant que JSON. D'un autre côté, si vous me suggérez d'éviter d'appeler AJAX pour les opérations de téléchargement de fichiers, pourriez-vous me préciser brièvement les inconvénients de l'utiliser pour ce scénario? >>> –

+0

** 2) ** Que proposez-vous de télécharger le fichier en utilisant un lien? Dois-je télécharger le fichier en appelant une méthode Javascript? Ou devrais-je télécharger via HtmlActionlink? –

Répondre

0

Vous devez retourner le nom du fichier ou le chemin du fichier Exemple « /file/download.doc » Et puis, vous devez éditer la page vue comme suivre

<a href="javascript:downloadFile()">Download</a> 
<a href="" id="todownload" download> 
function downloadFile() { 
    $.ajax({ type: 'POST', url: '/Experiment/GetFile', data: '{id:' + 8 + '}', //For test purpose I used static id 
    contentType: 'application/json; charset=utf-8', dataType: 'json', 
    success: function (returnValue) 
    $("#todownload").attr('href',returnValue); 
    $("#todownload").click(); 
    } 
    }); 
};