2017-06-05 26 views
1

Ich benutze Ajax, um eine Post-Anfrage an meine Server-Seite zu machen, ich erstelle eine Datei, sobald diese Datei erstellt wurde, muss ich sie in meinem Browser anzeigen, ich habe das mit Ajax gelesen ist nicht möglich, diese Datei anzuzeigen, aber ich kann mein success Ereignis in meiner Ajax-Funktion verwenden, um eine andere Methode auf meiner Serverseite aufzurufen, habe ich versucht, diese Datei als Array von Bytes im Speicher mit TempData oder sogar Session Variablen zu speichern und dann lese sie auf der anderen Methode ich rufe ajax success (genannt DisplayFile), aber die TempData Variablen sind immer null, wenn die DisplayFile-Methode aufgerufen wird ... Wenn Sie verschiedene Vorschläge zu tun haben, sind willkommen, ich habe Denken Sie in senden das Array von Bytes an JQuery und dann eine andere Anfrage, die es als Parameter übergeben, aber es ist ein sehr lange Reihe von Bytes .., ich bin nicht sicher, warum der TempData Wert null ist, wenn DisplayFile Methode von Client-Seite aufgerufen wird ...Zugriff auf TempData-Variablen

$.ajax({ url: "/FileManagement/Files", 
     type: 'post', 
     data: formData, 
     success: function(result){ 
      window.location = "/FileManagement/DisplayFile" 
} 
}) 

public JsonResult Files(//parameters...) 
{ 
//...some code 
TempData["BytesArray"] = fileBytes; //fileBytes is an array of bytes 
TempData["FileName"] = fileName; 
} 

public ActionResult DisplayFile() 
{ 
var file = TempData["BytesArray"]; //null 
var fileName = TempData["FileName"]; 
} 

UPDATE Es funktioniert jetzt mit Session-Variablen statt TempData Vielleicht liegt es daran, dass sich dieser Controller im Bereich "Bereiche" befindet. Dieser Controller befindet sich nicht im Controller-Ordner, vielleicht hat er damit zu tun, damit Session funktioniert, musste ich den vollständigen Pfad dazu verwenden: System.Web.HttpContext.Current.Session["test"] = "asasa"; Ich versuche immer noch herauszufinden, warum der Wert bei TempData null ist Wenn die zweite Methode aufgerufen wird ...

+0

Wenn Sie eine Datei irgendwo speichern, geben Sie einen bestimmten Bezeichner der Datei an Ajax Response zurück, und eine andere Controller-Aktion sollte diesen Bezeichner als Eingabe verwenden und den Dateiinhalt aus dem Store abrufen und zum Herunterladen bereitstellen. –

+0

@ChetanRanpariya Ich habe diesen Ansatz verwendet, aber die Datei wird asynchron gespeichert und wenn ich versuche, auf sie zuzugreifen, wurde sie manchmal noch nicht erstellt. Deshalb versuche ich, die Datei als Array von Bytes abzurufen und dann anzuzeigen. danke für deinen Vorschlag – AlexGH

+0

Ich habe genau das gemacht, was du versuchst zu tun. Es hat für mich funktioniert. Ich habe das Projekt für Ihre Referenz hier hochgeladen: https://1drv.ms/u/s!Ag2RGwevtqKWhmUkk_tRgJFIoMlA – Saket

Antwort

0

ich endlich Session Variablen am Ende mit, ich habe einen Controller innerhalb Areas Ordner bin mit, vielleicht weil der, dass TempData ist die Art und Weise nicht funktioniert ich erwarte, für Session Variablen, um auf diesem Controller ich den vollständigen Pfad, um es zu benutzen haben zu arbeiten, während sie in einem Controller in einem Controllers Ordner ich nicht diesen Weg benutzen müssen ..

public JsonResult Files(//parameters...) 
{ 
//...some code 
    System.Web.HttpContext.Current.Session["FileInBytes"] = bytesArray; //fileBytes is an array of bytes 
    System.Web.HttpContext.Current.Session["FileName"] = fileName;; 
} 

public ActionResult DisplayFile() 
{ 
    var fileInBytes = Session["FileInBytes"] as byte[]; 
    var fileName = Session["FileName"] as string; 
    Session.Remove("FileInBytes"); 
    Session.Remove("FileName"); 
}