3 Stimmen

Aktualisiere den Seiteninhalt nach Response.End()

Ich habe ein Stück Code, das eine CSV-Datei dynamisch generiert. Der Benutzer klickt auf einen Button, ich bereite den String vor und dann mache ich etwas Ähnliches wie:

MemoryStream stream = new MemoryStream(ASCIIEncoding.Default.GetBytes(sb.ToString()));
Response.Clear();
Response.ContentType = "Application/csv";
Response.AppendHeader("content-disposition", String.Format("attachment; filename={0}.csv", fileName.ToString()));
Response.BinaryWrite(stream.ToArray());
Response.End();

Der Benutzer wird dann aufgefordert, die neu generierte Datei herunterzuladen oder zu speichern. Das Problem besteht darin, dass ich nach diesem Schritt einige Daten auf der Seite aktualisieren muss. Nach dem Response.End ist dies nicht mehr möglich.

Ideen, wie das Problem gelöst werden kann?

4voto

m.edmondson Punkte 29622

Dies ist ein häufiges Problem und es gibt viele Möglichkeiten, es zu lösen, die alle darauf hinauslaufen, zwei separate Anfragen an Ihren Server zu erstellen. Die erste Anfrage wird Ihre CSV anfordern und die zweite wird Ihr Refresh anfordern.

Mit diesem Ziel vor Augen ist es offensichtlich, dass Sie entweder:

  • Den Benutzer dazu bringen können, beide Anfragen zu erstellen (indem er auf zwei Links klickt)
  • Verwenden Sie JavaScript, um beide zu erstellen, wenn der Benutzer nur einmal klickt

Beispielsweise könnte der Link, der Ihren CSV-Download auslöst, auch eine JavaScript-Funktion aufrufen, die Ihre Daten aktualisiert. Die übliche Möglichkeit, dies zu tun, wäre OnClientClick zu verwenden, um JavaScript aufzurufen, das Ihre Daten aktualisiert.

Sie können jedoch basierend auf Ihrer App entscheiden, wie Sie am besten vorgehen möchten.

3voto

abatishchev Punkte 94886

Vielleicht wird durch Klicken auf eine Schaltfläche in einem neuen Fenster der Benutzer auf einen Handler (ashx) umgeleitet, der den Datenstrom zurückgibt / den Benutzer auffordert, die Datei zu speichern?

-oder-

Aktualisieren Sie zuerst den Inhalt und senden Sie dann die Datei an einen Benutzer.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X