Download-Dialog nur einmal ausführen (ASP.Net)
-
Hallo
ich eröffne mal einen neuen Thread mit der Hoffnung, jemand kennt eine Lösung für mein Problem. Nachdem ich es jetzt geschafft habe einen Download-Dialog in meinem Browser zu öffnen und auch das jeweilige Dokument herunterladen oder öffnen kann, habe ich ein neues Problem:
Der Download wird ausgelöst durch einen Link in einer ListBox (ASP.Net webpage):if (szStringPath != "") { szDocumentName = szStringPath + szDocumentName; //Load link and show document in external programm (word,pdf,...) try { LinkListBox.SelectedIndex = -1; string szPostBack = "~/Download.aspx?FileName=" + szDocumentName; //Show the requested page Response.Redirect(szPostBack); } catch (Exception ex) { //show error lbErrorMeanView.Text = ex.Message; } }
In der Download.aspx.cs führe ich folgenden Code aus:
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { string path = Request.Params["FileName"]; System.IO.FileInfo file = new System.IO.FileInfo(path); Response.Clear(); string name = Path.GetFileName(path); string ext = Path.GetExtension(path); string type = ""; // set known types based on file extension if (ext != null) { switch (ext.ToLower()) { case ".htm": case ".html": type = "text/HTML"; break; case ".txt": type = "text/plain"; break; case ".doc": case ".rtf": type = "application/msword"; break; case ".pdf": type = "application/pdf"; break; } } Response.AddHeader("Content-Disposition", "attachment; filename=" + name); if (type != "") Response.ContentType = type; Response.WriteFile(path); Response.End(); Response.ClearHeaders(); Response.ClearContent();
Das funktioniert alles wunderbar. Wenn ich aber einmal auf diesen Link geklickt habe, dann ist egal auf was ich in meiner Webpage als nächstes klicke (andere Linkbuttons oder einen normalen Button), es erscheint immer der Download-Dialog wieder. Wie verhindere ich dass nach meinen Download-Dialog der Link in der ListBox weiter aktiv bleibt? Ich habe es schon mit ListBox.SelectedIndex = -1 versucht, aber das hilft nichts.
Kennt jemand das Problem und kann mir weiterhelfen?
-
Entweder mußt du szStringPath wieder löschen oder das erste Codebeispiel in einem Ereignishandler ausführen welcher nur beim Klicken auf den Download-Link ausgeführt wird.
-
Danke für den Tipp. Allerdings ist der Code bereits in einen Event-Handler eingebunden, und zwar in den ListBox_SelectedIndexChanged. Ich habe keinen Event-Handler für die ListBox gefunden der mir einen OnClick oder sowas Handler liefert. Was für Möglichkeiten habe ich da? Muss ich irgendwie die Daten, die ich in der ListBox anzeige, bereits irgendwie als Links hinterlegen oder sowas? Funktioniert das?
Das mit dem Pfad löschen muss ich ausprobieren, da er mir aber den Code dann trotzdem ausführt und nur das Download-Feld nicht öffnet bin ich wahrscheinlich nicht wirklich weiter da er mir ja dann mein anderes Ereignis, welches ich eigentlich ausführen wollte, ignoriert.