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 ...
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. –
@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
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