问题
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?
回答1:
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);
回答2:
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.
回答3:
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.
回答4:
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/
来源:https://stackoverflow.com/questions/10014920/response-write-and-updatepanel