Frage

Ich habe eine Form, die eine Response.Redirect startet eine Datei einmal komplett zum Download bereit. Ich möchte auch die Form verstecken und zeigen ein ‚Danke‘ Panel, bevor die Umleitung stattfindet, aber es scheint, die asp.net Motor tut nur die Umleitung ohne die zwei Aufgaben, bevor sie in den folgenden Code ausführen:

if (success)
                {
                    lblSuccessMessage.Text = _successMessage;
                    showMessage(true);                        
                }
                else
                {
                    lblSuccessMessage.Text = _failureMessage;
                    showMessage(false);
                }

                if(success)
                    Response.Redirect(_downloadURL); 

Jede Idee, wie ich die Seite zwingen kann, zu aktualisieren, bevor die Redirect tritt in ??

Dankhaufen Greg

War es hilfreich?

Lösung

if (success)
                {
                    lblSuccessMessage.Text = _successMessage;
                    showMessage(true);                        
                }
                else
                {
                    lblSuccessMessage.Text = _failureMessage;
                    showMessage(false);
                }

                if(success) {
                    Threading.Thread.Sleep(200)
                    Response.Redirect(_downloadURL);
                }

Sie können es zwingen zu warten, bevor sie, indem sie den Faden Schlaf umleitet.

Die beste und benutzerfreundlichste Option ist der Benutzer auf ihrem eigenen fortsetzen zu lassen, indem Sie eine Taste hinzufügen. Zum Beispiel könnten Sie Folgendes tun:

if (success)
                {
                    lblSuccessMessage.Text = _successMessage + "<br /><INPUT TYPE='button' VALUE='Continue...' onClick='parent.location='" + _downloadURL + "'/>";
                    showMessage(true);                        
                }
                else
                {
                    lblSuccessMessage.Text = _failureMessage;
                    showMessage(false);
                }

Andere Tipps

Sie müssen einige Client-Seite Code, um die Umleitung zu tun.

Meine Präferenz wäre einige Javascript einbetten die Umleitung zu tun.

Also, das Formular auszublenden, um die Nachricht anzuzeigen, und (auf der gröbsten Ebene) verwenden, um eine wörtliche Kontrolle einen Text so zu der Seite hinzuzufügen.

<script>
    location.href = "http://otherServerName/fileToDownload";
</script>

Sie können feststellen, dass diese Umleitung auftritt, bevor die Seite eine Änderung angezeigt hat - in diesem Fall versuchen, dies im Körper-Tag Ihrer HTML (beachten Sie die unterschiedlichen Arten von Anführungszeichen):

<body onload='location.href="http://otherServerName/fileToDownload";'>

Denken Sie daran, dass jeder Beitrag zurück tatsächlich eine neue Seite an den Client serviert, nicht nur einige Eigenschaften auf der aktuellen Seite zu ändern (auch wenn ASP.NET schwer zu behaupten versucht, dass es nur wie ein Windows-Formular)

Persönlich ziehe ich es für jede Phase des Prozesses eine eigene Seite zu haben, anstatt zu versuchen, die verschiedenen Bits, die durch Ein- / Ausblenden alles auf einer Seite zu tun - aber ich konnte hoffnungslos veraltet sein

.

EDIT:., Wenn sie Javascript deaktiviert haben, können Sie nur einen Link zum Herunterladen der Datei

Sie kann nicht, weil diese Aktion auf dem Server geschieht, bevor seine zurück an den Client gesendet. Wenn Sie versuchen, eine Datei an einen Benutzer zu senden, können Sie es ihnen streamen Response.Write () verwenden. Dies wird sie auf der aktuellen Seite halten, damit Sie ihnen die Meldung, und sie werden die Download-Aufforderung erhalten.

Puffer ist eine Byte-Array einer Datei

Response.AddHeader("Content-disposition", "attachment; filename=" & myUserFriendlyFileName)
Response.ContentType = "application/octet-stream"
Response.OutputStream.Write(buffer, 0, buffer.Length)

Direkt in asp.net kippen Sie dies tun, sondern ein Weg, um entweder JS verwenden (wie hier geschrieben wird), oder Sie können einen IFrame verwenden, die die Datei lädt heruntergeladen werden - der Benutzer sieht die thankyou , dann ist das Öffnen / speichern Dialog ...

Verstecken Sie es Client-Seite mit Javascript und dann die Umleitung tun, oder zwei Postbacks tun: erste Postbacks die Form zu verstecken und zeigt die Dankes- und die zweiten die Umleitung einmal den Dank zu tun gemacht wurde der Bildschirm.

Oder Sie könnten eine Javascript tun window.open anstelle einer Umleitung, die auf die Zielpunkte, nachdem die Postbacks und Form Versteck abgeschlossen ist.

Vielleicht manuell einen Redirect-Header senden, mit einer Anzahl von Sekunden zu warten, ist der Weg für Sie gehen?

Response.AddHeader("Redirect", "3; URL=" + _downloadURL")

Bearbeiten

Nach Ihrer Frage noch einmal zu lesen, ich haben Sie vielleicht ein wenig falsch verstanden.

Sie scheinen den gesamten Prozess verzögern zu wollen, so dass ein „Danke“ Panel angezeigt werden kann. Das lässt Sie zwei Möglichkeiten:

  • Entweder Sie verlassen sich auf JavaScript, um die Platte zu führen und die Form POST verzögern. Der Server kann dann umleiten sofort mit Response.Redirect(). Dies ist die modernere Art und Weise, es zu tun.
  • Oder Sie möchten von JavaScript völlig unabhängig sein. In diesem Fall müssen Sie die Serveranzeige ein Zwischen „Danke, klicken Sie hier, um fortzufahren“ machen Seite auf die Form POST und die Redirect-Header-Methode über Response.AddHeader() verwenden, um die Seite weg automatisch gehen zu machen. Das ist ein bisschen altmodisch, aber zuverlässig.

Sie können nicht wirklich eine Kombination aus beidem haben, denn das ist für die Benutzer unvereinbar wäre, die JavaScript ausgeschaltet.

ich am Ende tut den Vorschlag abrudtkuh, nur einen Link zur Succeess Nachricht Hinzufügen ... ich werde auch einen Javascript-Redirect implementieren, um automatisch den Download zu starten, aber ich wollte nicht allein auf Javascript angewiesen, damit die Schaltfläche von der Seite angezeigt wird.

Danke für die Tipps alle - Sie alle Rock

prost greg

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top