2012-04-04 15 views
12

wygenerować vcard że ja wysłać do klienta stosując następujący fragment kodu:Response.Write i UpdatePanel

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

Jednak muszę używać vCard na stronie, która ma kontrolę wewnątrz i UpdatePanel. Niestety, zgodnie z Update panel and Response write to nie działa i powoduje błąd. Zastanawiam się, jakie są alternatywne sposoby wysyłania zawartości vcard/pliku do przeglądarki klienta i czy wyświetla się okno dialogowe "Otwórz/zapisz", które nie zawiera odpowiedzi?

+0

Tylko jeśli zrobisz panelu aktualizacji, aby anulować aktualizację ajax iw pełni stanowisko strony otworu. Innym sposobem jest użycie programu do obsługi X-Vcard i jest to lepsze ze wszystkich przypadków. – Aristos

Odpowiedz

32

Nie można użyć Response.Write podczas asynchronicznego oddzwonienia. Cokolwiek kontrola wykonywana że kod musi zostać dodany jako PostBackTrigger w panelu aktualizacji:

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

Można również zrobić to w kodzie opóźnieniem, jeśli wolisz:

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

GetCurrent() powinien otrzymać jeden argument prawdopodobnie to zadziała –

+0

To nie działa dla mnie, ale używam updatepanels obok modalpopupextender i zastanawiam się, czy to jest dodatkowy problem. Po prostu próbuję pobrać zwykły plik z serwera. – JoeManiaci

1

Response.Write will not work under Asynchronous Events. Moją sugestią jest usunięcie panelu aktualizacji na wypadek, gdyby był on wykorzystywany wyłącznie do celów VCard.

Alternatywnie - Umieść kontrolkę wewnątrz panelu aktualizacji i zainicjuj jej wartość w asynchronicznym zdarzeniu. Teraz to zadziała.

1

Dlaczego nie rozważysz użycia oddzielnej procedury obsługi/strony do obsługi vcard?

Jest to być może najłatwiejszy i najczyściejszy sposób na zrobienie tego i nie zakłóca on żadnego innego (asynchronicznego lub nie) ogłaszania zwrotnego związanego z updatepanel.

1

Miałem podobny problem z Response.Write. Znalazłem obejście, a może nawet rozwiązanie tego problemu. Przechwyć TextWriter podany do RenderBeginTag kontrolera serwera i napisz do niego.

I blogu na przykładzie tutaj: http://timscyclingblog.wordpress.com/2013/03/07/asp-net-web-forms-response-write-in-an-updatepanel-dev-web/

+1

Jest to technicznie odpowiedź na to pytanie, ale trafiło ono do LQP, więc może zostać usunięte przez recenzentów korzystających z funkcji wyzwalacza. Zastanów się, umieszczając część swojego posta na blogu w tej odpowiedzi. –

Powiązane problemy