2012-04-04 10 views
12

I erzeugen eine V-Card, die ich an den Client senden Sie den folgenden Code-Schnipsel mit:Response.Write und Update

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(); 

Ich brauche aber auf einer Seite vCards zu verwenden, die die Kontrolle innerhalb und Update hat. Leider funktioniert das laut Update panel and Response write nicht und verursacht einen Fehler. Ich frage mich, was sind einige alternative Möglichkeiten, um den Inhalt der vcard/Datei an den Client-Browser senden und zeigen es "Öffnen/Speichern" -Dialog, die nicht mit Response.Write?

+0

Nur wenn Sie Update-Panel machen das Ajax-Update abzubrechen und vollständigen Beitrag von Loch Seite machen. Eine andere Möglichkeit besteht darin, einen Handler zu verwenden, um Ihre x-vcard zu senden, und dies ist von allen Fällen besser. – Aristos

Antwort

32

Sie können Response.Write nicht während eines asynchronen Postbacks verwenden. Was auch immer Steuerung ausführt, dass Code hinzugefügt werden muss als PostBackTrigger in der Update-Panel:

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

Sie es auch tun können, in Code-behind, wenn Sie es vorziehen:

ScriptManager.GetCurrent().RegisterPostBackControl(Button1); 
+1

GetCurrent() sollte ein Argument erhalten wahrscheinlich ein dies wird funktionieren –

+0

Das hat nicht für mich funktioniert, aber ich benutze updatepanels neben einem modalpopupetender und ich frage mich, ob das ein zusätzliches Problem ist. Ich versuche nur, einen normalen Dateidownload vom Server durchzuführen. – JoeManiaci

1

Response.Write will not work under Asynchronous Events. Mein Vorschlag ist, das Update Panel zu entfernen, falls es speziell für VCard Point of View verwendet wird.

Alternativ - Platzieren Sie ein Steuerelement im Aktualisierungsbereich und initialisieren Sie den Wert unter asynchronem Ereignis. Jetzt wird es funktionieren.

1

Warum denken Sie nicht über die Verwendung eines separaten Handlers/Seite, um die vcard zu bedienen?

Dies ist vielleicht der einfachste und sauberere Weg, dies zu tun, und es stört nicht andere (async oder nicht) Postback im Zusammenhang mit dem Updatepanel.

1

Ich hatte ein ähnliches Problem mit Response.Write. Ich habe einen Workaround oder vielleicht sogar eine Lösung für dieses Problem gefunden. Erfassen Sie die TextWriter, die an die RenderBeginTag eines Serversteuerelements gegeben wird, und schreiben Sie dazu.

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

+1

Dies ist technisch eine Antwort auf die Frage, aber es ist in LQP gelandet, so dass es leicht von triggerfreudigen Rezensenten gelöscht werden kann. Erwägen Sie, einige Ihrer Blogposts in diese Antwort aufzunehmen. –