Asp.net Response.Write和UpdatePanel

Asp.net Response.Write和UpdatePanel,asp.net,updatepanel,httpresponse,response.write,Asp.net,Updatepanel,Httpresponse,Response.write,我使用以下代码段生成一张vcard,并将其发送给客户端: Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", fileNameOnly)); Response.ContentType = "text/x-vcard"; Response.ContentEncoding = Encoding.GetEncoding("ISO-8859-1"); Response.Write(vCar

我使用以下代码段生成一张vcard,并将其发送给客户端:

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();
但是,我需要在包含控件和UpdatePanel的页面上使用vCard。不幸的是,根据这一点不起作用,并导致错误。
我想知道有哪些替代方法可以将vcard/文件的内容发送到客户端浏览器,并使其显示不涉及响应的“打开/保存”对话框。写入?

您不能在异步回发期间使用
响应。写入
。执行该代码的任何控件都需要添加为更新面板中的
PostBackTrigger

<Triggers>        
    <asp:PostBackTrigger ControlID="Button1" />
</Triggers>
。我的建议是删除更新面板,以防它专门用于VCard视角


或者-将控件放置在更新面板中,并在异步事件下初始化其值。现在,它会起作用。

为什么不考虑使用单独的处理程序/页面来服务vCub?
这可能是最简单、更简洁的方法,并且不会干扰与updatepanel相关的任何其他(异步或非异步)回发。

我在
响应中遇到类似问题。编写
。我找到了解决这个问题的方法,甚至可能是一个解决方案。捕获提供给服务器控件的
RenderBeginTag
TextWriter
,并写入该控件


我在博客中举了一个例子:

只有当您使用更新面板来取消ajax更新并发布完整的页面时。另一种方法是使用处理程序发送x-vcard,这在所有情况下都会更好。GetCurrent()应该收到一个参数,这可能会起作用。这对我来说不起作用,但我使用的是updatepanels和ModalPopupXtender,我想知道这是否是一个额外的问题。我只是想从服务器上定期下载文件。效果很好。在AsyncPostBackTrigger触发器旁边添加PostBackTrigger触发器,如更改事件上的combobox:现在检查编辑的答案它工作完全正常..经过尝试和测试这在技术上是对问题的回答,但它在LQP中着陆,因此它很可能被喜欢触发的审阅者删除。考虑在这个答案中包括你的博客文章。
ScriptManager.GetCurrent().RegisterPostBackControl(Button1);