我有一个 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
on的回发控件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>
在同一个更新面板中。
当我单击此搜索按钮,然后单击下载图标时,它的行为完全符合预期(在客户端下载文件),并且控制台中没有错误。
我无法找出此解决方法背后的原因。
请帮帮我。