PDF envoyé à la console du navigateur, pas de téléchargement

J’utilise Rotativa pour générer un fichier PDF à partir d’une vue , ce qui fonctionne bien, mais maintenant sur le navigateur, le fichier brut est envoyé à la console, aucune boîte de dialog de téléchargement, aucun avertissement, rien. Voici mon code:

Manette

public ActionResult DescargarPDF (int itemId) { var presupuesto = ReglasNegocio.Fachada.Consultas.ObtenerPresupuesto(itemId); return new Rotativa.PartialViewAsPdf("_PresupuestoFinal", presupuesto) { FileName = "Presupuesto_" + itemId + ".pdf", PageSize = Rotativa.Options.Size.A4 }; } 

Script JQuery:

 $(".convertirPDF").on("click", function (id) { var itemId = $(this).data('itemid'); Pdf(itemId); }); function Pdf(itemid) { var id = itemid; $.ajax({ method: "POST", url: 'DescargarPDF', data: { itemId: id }, cache: false, async: true, }); }; 

Bouton sur le HTML

  

J’ai essayé plusieurs codes sur le contrôleur (avec le même résultat) car le script et la vue semblent bien fonctionner. Cependant, je soupçonne que le code HTML ou le script nécessite peut-être quelques ajustements pour informer le navigateur qu’il doit télécharger le fichier?

Merci à tous d’avance.

J’ai trouvé une solution. Ce n’est pas élégant, mais ça marche. Donc, je n’avais pas nécessairement besoin d’utiliser ajax pour faire la demande, ni pour donner une fonction au bouton. Je suis un peu sûr que le problème a quelque chose à voir avec JS et / ou jQuery. Néanmoins, il existe un moyen plus simple de le faire.

J’ai changé mon bouton html en:

 PDF 

cela ressemble donc à un bouton mais c’est vraiment un lien vers la méthode de mon contrôleur. J’ai également supprimé le script pour ce bouton et maintenant il télécharge le fichier. Pas avec le nom prévu, mais quand même.

Merci à tout le monde. Bonne codage.

METTRE À JOUR

Je travaille sur le même projet et je pense avoir compris pourquoi mon fichier PDF était jeté dans la console.

Le fait est que jQuery fait la demande, donc jQuery gère la réponse. Est-ce si simple? Si vous vérifiez la documentation officielle pour .post() , vous verrez ce qui suit:

Les données renvoyées sont transmises à la fonction de rappel de réussite, qui sera un élément racine XML ou une chaîne de texte en fonction du type MIME de la réponse. Il est également passé le statut du texte de la réponse.

Depuis jQuery 1.5, la fonction de rappel de réussite reçoit également un object “jqXHR” (dans jQuery 1.4, l’object XMLHttpRequest lui a été transmis).

La plupart des implémentations spécifieront un gestionnaire de réussite.

Et je n’étais pas, donc, par défaut, il suffit de le déposer sur la console. J’espère que cela jette un peu de lumière sur le problème et aide. Bonne codage.