2012-04-04 52 views
12

我产生,我用下面的代码片段发送给客户端一个虚拟卡:的Response.Write和UpdatePanel的

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控件在页面上使用的电子名片。不幸的是,根据Update panel and Response write这不起作用,并导致一个错误。 我想知道什么是一些替代方法发送到客户端的浏览器的Vcard /文件的内容,并让它显示“打开/保存”对话框,不涉及Response.Write?

+0

只有当你做出更新面板取消AJAX更新并充分后孔的页面。其他方法是使用处理程序发送您的x-vcard,这在所有情况下都更好。 – Aristos 2012-04-04 16:04:40

回答

32

在异步回发过程中不能使用Response.Write。无论控制执行需要被添加为更新面板PostBackTrigger代码:

<Triggers>   
    <asp:PostBackTrigger ControlID="Button1" /> 
</Triggers> 

你也可以做到这一点在代码隐藏,如果你喜欢:

ScriptManager.GetCurrent().RegisterPostBackControl(Button1); 
+1

GetCurrent()应该会收到一个参数,可能这将工作 – 2014-09-30 21:20:39

+0

这不适合我,但我正在使用updatepanels一起modalpopupextender,我想知道如果这是一个额外的问题。我只是试图从服务器上进行常规文件下载。 – JoeManiaci 2016-02-16 18:55:31

1

为什么不考虑使用单独的处理程序/页面来为vcard提供服务?

这是可能做到这一点的最简单和干净的方式和它不干扰任何其他(异步与否)回发相关的UpdatePanel。

1

我也有类似的问题,Response.Write。我发现了一种解决方法,或者甚至可以解决这个问题。捕获TextWriter给予服务器控件的RenderBeginTag并写入。

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

+1

这在技术上是对这个问题的回答,但它落在LQP中,因此很容易被触发快乐的评论者删除。考虑在这个答案中包括一些你的博客文章。 – 2016-03-21 21:25:00