我使用以下代码片段生成我发送给客户端的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的页面上使用vCards。不幸的是,根据Update panel and Response write,这不起作用并导致错误。 我想知道将vcard /文件的内容发送到客户端浏览器的其他方法是什么,让它显示“打开/保存”对话框,不涉及Response.Write?
答案 0 :(得分:36)
在异步回发期间,您无法使用Response.Write
。无论执行什么控件,都需要在更新面板中将PostBackTrigger
添加为代码:
<Triggers>
<asp:PostBackTrigger ControlID="Button1" />
</Triggers>
如果您愿意,也可以在代码隐藏中执行此操作:
ScriptManager.GetCurrent().RegisterPostBackControl(Button1);
答案 1 :(得分:1)
<强> Response.Write will not work under Asynchronous Events 即可。我的建议是删除更新面板,以防它专门用于VCard观点。
或者 - 将控件放在Update Panel中并在异步事件下初始化它的值。现在它会起作用。
答案 2 :(得分:1)
为什么不考虑使用单独的处理程序/页面来提供vcard?
这可能是最简单,最简洁的方法,它不会干扰与updatepanel相关的任何其他(异步或非异步)回发。
答案 3 :(得分:1)
我遇到与Response.Write
类似的问题。我找到了解决方法,甚至可能解决了这个问题。捕获给予服务器控件TextWriter
的{{1}}并写入该文件。