I generate a vcard that I send to the client using the following code snippet:
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();
However, I need to use vCards on a page that has the control inside and UpdatePanel. Unfortunately, according to Update panel and Response write this does not work and causes an error.
I am wondering what are some alternative ways to send the contents of the vcard/file to the client's browser and have it display "open/save" dialog that don't involve Response.Write?
You can't use Response.Write
during an asynchronous postback. Whatever control executes that code needs to be added as a PostBackTrigger
in the update panel:
<Triggers>
<asp:PostBackTrigger ControlID="Button1" />
</Triggers>
You can also do it in code-behind, if you prefer:
ScriptManager.GetCurrent().RegisterPostBackControl(Button1);
Response.Write will not work under Asynchronous Events. My suggestion is to remove the Update Panel in case it is specifically being used for VCard point of view only.
Alternatively - Place a control inside the Update Panel and initialize it's value under asynchronous event. Now it will work.
Why don't you consider the use of a separate handler/page to serve the vcard?
This is maybe the easiest and cleaner way to do that and it doesnt interfere any other (async or not) postback related to the updatepanel.
I had a similar problem with Response.Write
. I found a workaround or maybe even a solution to this problem. Capture the TextWriter
given to the RenderBeginTag
of a server control and write to that.
I blogged with an example here: http://timscyclingblog.wordpress.com/2013/03/07/asp-net-web-forms-response-write-in-an-updatepanel-dev-web/