Response.Write和UpdatePanel

时间:2012-04-04 16:01:26

标签: 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(vCard.ToString());
Response.End();

但是,我需要在内部具有控件和UpdatePanel的页面上使用vCards。不幸的是,根据Update panel and Response write,这不起作用并导致错误。 我想知道将vcard /文件的内容发送到客户端浏览器的其他方法是什么,让它显示“打开/保存”对话框,不涉及Response.Write?

4 个答案:

答案 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}}并写入该文件。

我在这里写了一个例子:http://timscyclingblog.wordpress.com/2013/03/07/asp-net-web-forms-response-write-in-an-updatepanel-dev-web/

相关问题