Télécharger le fichier – Asp.net MVC avec Jquery

Téléchargez un fichier avec JQUERY MVC. L’utilisateur clique sur le bouton et je télécharge le fichier qui a l’air aussi simple qu’il soit.

Mon événement Jquery

$(document).on("click", "#download", function () { $.blockUI(); window.location = "../Home/Download"; $.unblockUI(); } 

et qui appelle mon côté serveur

 public ActionResult Download() { return File(); } 

Tout va bien, sauf que j’utilise Block UI (Jquery Plugin) pour informer l’utilisateur que le téléchargement est en cours … “Veuillez patienter”

et une fois le téléchargement terminé, je dois débloquer l’interface utilisateur et laisser l’utilisateur enregistrer / ouvrir le fichier. Comment puis-je modifier le code ci-dessus pour réaliser ceci ou toute autre idée?

Actuellement, mon code c # est appelé et la ligne suivante de jQuery est exécutée et le blocage de l’interface utilisateur est Terminé dans la seconde suivante. Comment puis-je faire attendre le téléchargement?

Vous n’avez pas besoin de window.location . Vous pouvez simplement créer un iframe aide de jQuery et définir son url sur votre action. Pour débloquer l’interface .load méthode .load peut être utilisée. Vous devez également créer un conteneur masqué dans votre code HTML qui contiendra l’iframe afin qu’il rest masqué.

  $(document).on("click", "#download", function () { $.blockUI(); var iframe = $("").load(function () { $.unblockUI(); }).attr({ src: "../Home/Download" }).appendTo($("#DivIframeContainer")); } 

La manière dont l’utilisateur interagit avec les téléchargements de fichiers doit être laissée au navigateur.

Dans votre exemple, votre interface utilisateur leur indiquera que le fichier est en cours de téléchargement, alors qu’en fait le navigateur fera la même chose.

Vous devez simplement utiliser une ancre avec le paramètre href défini sur l’emplacement de téléchargement:

  Download  

Vous pouvez le faire en appelant votre serveur via AJAX. Voici un exemple sur la façon de bloquer votre interface utilisateur lorsque vous effectuez un appel ajax.

Attachez les méthodes Block / Unblock à la fonction $ (document) .ready. Chaque fois qu’un appel AJAX est passé, l’interface utilisateur sera bloquée.

 $(document).ready(function () { }).ajaxStart(function () { $.blockUI(); }).ajaxStop(function () { $.unblockUI(); }); $(document).on("click", "#download", function () { DownloadFile(); } function DownloadFile() { $.ajax({ url: "../Home/Download", data: { null }, success: function (data) { //Do something with data that is returned. (The downloaded file?) } }); }