【发布时间】:2012-05-30 04:41:47
【问题描述】:
我有一个 Datalist 控件,它显示缩略图和一个下载图标(ImageButton),Datalist 包裹在 UpdatePanel 下,当用户点击下载图标时,我调用以下函数以允许在用户端下载文件
protected void dtlSearchDetails_ItemCommand(object source, DataListCommandEventArgs e)
{
if (e.CommandName == "dtlImgDownload")
{
downloadFile(e.CommandArgument.ToString(), "~/uploads/primary/");
}
}
功能:
public void downloadFile(string fileName, string filePath)
{
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", string.Format("attachment; filename=\"{0}\"", fileName));
Response.WriteFile(filePath + fileName);
}
现在由于 ImageButton / Datalist 包裹在 UpdatePanel 中,我已将其注册为回发控件,并在 Page_Load 上使用 ScriptManager
if (dtlSearchDetails.Items.Count > 0)
{
foreach (DataListItem li in dtlSearchDetails.Items)
{
ImageButton img = (ImageButton)li.FindControl("dtlImgDownload");
ScriptManager.GetCurrent(this.Page).RegisterPostBackControl(img);
}
}
现在,当我单击下载图标时,什么也没有发生,我在控制台中收到以下错误:
未捕获的 Sys.WebForms.PageRequestManagerParserErrorException:Sys.WebForms.PageRequestManagerParserErrorException:消息 从服务器收到的无法解析。造成这种情况的常见原因 错误是通过调用 Response.Write() 修改响应时, 响应过滤器、HttpModules 或服务器跟踪已启用。
但是,
同一页面上还有其他控件,例如搜索按钮,它们在此 UpdatePanel 之外,但我已将它们注册为
<trigger>
<asp:AsyncPostBackTrigger ControlID="btnKeySearch" />
</trigger>
在同一个更新面板中。
当我单击此搜索按钮,然后单击下载图标时,它的行为完全符合预期(在客户端下载文件),并且控制台中没有错误。
我无法找出此解决方法背后的原因。
请帮帮我。
【问题讨论】:
标签: c# asp.net updatepanel httpresponse datalist