我有一个显示缩略图的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
中,我已将其注册为ScriptManager
上的Page_Load
的回发控件
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>
在同一个updatePanel中。
当我点击此搜索按钮,然后点击下载图标时,它的表现完全正常(在客户端下载文件)而没有控制台错误。
我无法找到此解决方法背后的原因。
请帮助我。
答案 0 :(得分:2)
您的ImageButton
位于DataList
内,因此您必须在RegisterPostBackControl
的{{1}}事件中执行DataList
。
ItemDataBound