UpdatePanel 中的错误:无法评估表达式,因为代码已优化或本机框架位于调用堆栈的顶部

Error in UpdatePanel: Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack

我使用的是 UpdatePanel,里面有一个 Gridview。计时器正在检查 Gridview 中的某些内容。在 Gridview 中,我生成了一个用于查看上传的列:

<asp:TemplateField HeaderText="Zeichnung" ItemStyle-HorizontalAlign="Center">

后面的代码:

 ImageButton ibtn = new ImageButton();
 ibtn.CommandArgument = Upload;
 ibtn.Click += btn_clicked;
 ibtn.ImageUrl = "~/images/download.png";
 ibtn.ToolTip = "Zeichnung öffnen";
 gvr.Cells[20].Controls.Add(ibtn);

点击按钮开始下载:

Response.ClearHeaders();
Response.ContentType = "application/pdf";
Response.Clear();
Response.AppendHeader("Content-Disposition", "attachment;Filename=" + Upload);
Response.TransmitFile(Page.MapPath("App_data/OPL/Upload/" + Upload));
Response.End();

在我将 gridview 放入 UpdatePanel 之前一切正常。现在它抛出错误:

Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack

我尝试用 HttpContext.Current.ApplicationInstance.CompleteRequest(); 替换 Response.End() 但没有任何改变。

如这里所写 (question) 这是回发的问题。解决方案似乎是

protected void Page_Load(object sender, EventArgs e) {
ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
scriptManager.RegisterPostBackControl(this.btnExcelExport);
//Further code goes here....
}

但是我无法添加这段代码,因为按钮是生成的,但没有在 gridview 中给出。我试图添加 scriptManager.RegisterPostBackControl(this.btn_Upload); 但他没有找到按钮。

我该如何解决这个问题?谢谢

一个可能的解决方案是将 gridview(作为一个整体)注册为回发控件。ScriptManager.RegisterPostBackControl(this.gvr);