Response.Write und UpdatePanel

Ich generiere eine vCard, die ich mit dem folgenden Code-Snippet an den Client sende:

<code>Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", fileNameOnly));
Response.ContentType = "text/x-vcard";
Response.ContentEncoding = Encoding.GetEncoding("ISO-8859-1");
Response.Write(vCard.ToString());
Response.End();
</code>

Ich muss jedoch vCards auf einer Seite verwenden, auf der sich das Steuerelement und UpdatePanel befinden. Leider lautUpdate Panel und Antwort schreiben Das funktioniert nicht und verursacht einen Fehler. Ich frage mich, welche alternativen Möglichkeiten es gibt, den Inhalt der vCard / Datei an den Browser des Clients zu senden und das Dialogfeld "Öffnen / Speichern" anzuzeigen, in dem Response.Write nicht enthalten ist.

 Aristos04. Apr. 2012, 18:04
Nur wenn Sie Update Panel machen, um das Ajax-Update abzubrechen und den vollständigen Beitrag der ganzen Seite zu machen. Eine andere Möglichkeit ist die Verwendung eines Handlers zum Senden Ihrer X-V-Karte. Dies ist in jedem Fall besser.

Antworten auf die Frage(4)

Response.Write. Ich habe eine Problemumgehung oder vielleicht sogar eine Lösung für dieses Problem gefunden. Erfassen Sie dieTextWriter gegeben an dieRenderBeginTag von einem Server-Steuerelement und schreiben Sie dazu.

Ich habe hier mit einem Beispiel gebloggt:http://timscyclingblog.wordpress.com/2013/03/07/asp-net-web-forms-response-write-in-an-updatepanel-dev-web/

 Jeffrey Bosboom21. März 2016, 22:25
Dies ist technisch gesehen eine Antwort auf die Frage, sie ist jedoch in LQP gelandet, sodass sie möglicherweise von auslöserfreudigen Überprüfern gelöscht wird. Erwägen Sie, einen Teil Ihres Blogposts in diese Antwort aufzunehmen.
Lösung für das Problem

Sie können nicht verwendenResponse.Write während eines asynchronen Postbacks. Welches Steuerelement auch immer diesen Code ausführt, muss als a hinzugefügt werdenPostBackTrigger im Update-Bereich:

<code><Triggers>        
    <asp:PostBackTrigger ControlID="Button1" />
</Triggers>
</code>

Sie können dies auch im Code-Behind tun, wenn Sie es vorziehen:

<code>ScriptManager.GetCurrent().RegisterPostBackControl(Button1);
</code>
 JoeManiaci16. Feb. 2016, 19:55
Das hat bei mir nicht funktioniert, aber ich benutze Updatepanels neben einem Modalpopupextender und frage mich, ob das ein zusätzliches Problem ist. Ich versuche nur, einen regulären Dateidownload vom Server durchzuführen.
 RBILLC18. März 2019, 17:09
Funktioniert super. Fügen Sie den PostBackTrigger neben AsyncPostBackTrigger-Triggern wie dem Kombinationsfeld für Änderungsereignisse hinzu: <Triggers> <asp: AsyncPostBackTrigger ControlID = "cmbData" EventName = "SelectedIndexChanged" /> <asp: PostBackTrigger ControlID = "Btn_Reject" /> </
 Gabriel Monteiro Nepomuceno30. Sept. 2014, 23:20
GetCurrent () sollte ein Argument erhalten, wahrscheinlich funktioniert dies

separaten Seite in Betracht, um die vcard bereitzustellen?

Dies ist möglicherweise der einfachste und sauberste Weg, dies zu tun, und es stört keine anderen (asynchronen oder nicht asynchronen) Postbacks, die mit dem Updatepanel zusammenhängen.

Response.Write funktioniert nicht unter asynchronen Ereignissen. Mein Vorschlag ist, das Update-Fenster zu entfernen, falls es nur aus Sicht der VCard verwendet wird.

Alternativ - Platzieren Sie ein Steuerelement im Update-Bereich und initialisieren Sie seinen Wert unter dem asynchronen Ereignis. Jetzt wird es funktionieren.

Ihre Antwort auf die Frage