2010-04-28 9 views
5

Ich bin ziemlich neu mit jQuery und asp.net mvc. Mein Problem ist, dass ich eine Methode in einem Controller anrufe, der ein FileStreamResult zurückgibt. Das funktioniert gut, aber wenn ich es mit dem jQuery-Post anrufe, funktioniert es nicht. Ich kann mit dem Debug-Tool sehen, dass das Programm die Methode betrifft. Daher denke ich, dass es etwas damit zu tun hat, dass mein jQuery-Aufruf sich um den Return-Parameter kümmern sollte? Somenöe?jQuery Post mit FileStreamResult als Rückgabewert

Die jQuery-Code:

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

Das Verfahren in der Steuerung:

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

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

Könnte jemand erklären, und geben Sie mir einige Beispiel-Code?

+0

Warum wollen Sie es von einem JavaScript-Funktion aufrufen müssen? –

Antwort

3

Verwenden $ Schnipsel() -Methode, weil Sie keine Parameter an:

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

Was ich versuche ist, dass ich einen jQuery-Dialog anzeigen möchte, während die Methode 'DownloadAsPowerpoint' ausgeführt wird. Funktion createPPT() {$ ("# dialog-confirm"). Dialog ({autoOpen: false, modal: true, veränderbar: false, closeOnEscape: false, open: function (event, ui) {$ (". ui-dialog-titlebar-close "). hide();}}); $ ("# dialog-confirm"). dialog ('open'); $ .post ("<% = Url.Action (" DownloadAsPowerpoint "," RightMenu ")%>"); $ ("# dialog-confirm") .dialog ('close'); – karl

+0

Wie ich verstehe, versuchen Sie, Bestätigungsdialog hinzuzufügen, richtig? Der jQuery-Dialog wird asynchron ausgeführt, daher ist es ein wenig schwierig, ihn synchron auszuführen und das Ergebnis an die onclick-Funktion zurückzugeben. Versuchen Sie stattdessen, die Bestätigungsfunktion zu verwenden. Ich habe den Beitrag bearbeitet. – wassertim

+0

Bestätigen ist ein schlechter Name (Copy & Paste). Ich möchte, dass ein Dialog erscheint, in dem eine Lade-Animation angezeigt wird, und blende dann aus, wenn meine Controller-Methode abgeschlossen ist. Also zuerst möchte ich ein div mit der aniamtion laden. Dann möchte ich meine Controller-Methode ausführen. Zuletzt möchte ich den filestream erhalten und das Div mit der Animation verstecken. – karl