문제

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/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top