2010-04-28 4 views
5

Je suis assez nouveau avec jquery et asp.net mvc. Mon problème est que j'appelle une méthode dans un contrôleur qui renvoie un FileStreamResult. Cela fonctionne très bien, mais quand je l'appelle avec le post de jQuery cela ne fonctionne pas. Je peux voir avec vs outil de débogage que le programme est en train d'exécuter la méthode. Donc, je pense que cela a quelque chose à voir avec que mon appel jQuery devrait prendre soin du paramètre de retour? Somenoe?Post jQuery avec FileStreamResult comme valeur de retour

Le code jQuery:

<script type="text/javascript"> 
    function createPPT() { 
      $.post("<%= Url.Action("DownloadAsPowerpoint", "RightMenu")%>"); 
    } 
    </script> 

La méthode dans le contrôleur:

public ActionResult DownloadAsPowerpoint() 
    { 
     Stream stream; 
     //... 
     HttpContext.Response.AddHeader("content-disposition", "attachment; filename=presentation.pptx"); 

     return new FileStreamResult(stream, "application/pptx"); 
    } 

Quelqu'un pourrait-il expliquer et me donner quelques exemples de code?

+0

Pourquoi avez-vous besoin de l'appeler d'une fonction JavaScript? –

Répondre

3

Utilisez la méthode de .ajax() de $, parce que vous n'envoyez pas de paramètres:

function createPPT() { 
     //Show waiting dialog here 
     $.ajax({ 
      url: '<%=Url.Action("DownloadAsPowerpoint") %>', 
      method:'GET', 
      success: function (fileStream) { 
       //Hide waiting dialog here 
       alert(fileStream); //This is your filestream 
      } 
     }); 
     return false; 
    } 
+0

Ce que j'essaie de faire, c'est que je veux afficher une boîte de dialogue jQuery pendant l'exécution de la méthode 'DownloadAsPowerpoint'. function createPPT() {$ ("# dialogue-confirme"). Dialog ({autoOpen: faux, modal: vrai, redimensionnable: false, closeOnEscape: faux, ouvert: function (event, ui) {$ (". ui-dialog-titlebar-close "). hide();}}); $ ("# dialogue-confirm"). dialog ('open'); $ .post ("<% = Url.Action (" DownloadAsPowerpoint "," RightMenu ")%>"); $ ("# dialogue-confirm"). dialog ('close'); – karl

+0

Si je comprends bien, vous essayez d'ajouter une boîte de dialogue de confirmation, non? La boîte de dialogue jQuery s'exécute en async, il est donc un peu difficile de l'exécuter en synchronisation et de renvoyer le résultat à la fonction onclick. Essayez d'utiliser la fonction de confirmation à la place. J'ai édité le post. – wassertim

+0

Confirmer est une mauvaise appellation (copier/coller). Je veux qu'une boîte de dialogue apparaisse avec une animation de chargeur pour faire un popup puis disparaître quand ma méthode de contrôleur est faite. Donc, je veux charger un div avec l'anion. Ensuite, je veux exécuter ma méthode de contrôleur. Enfin, je veux recivrer le flux de fichiers et cacher la div avec l'animation. – karl