asp.net - 在 GridView 和 UpdatePanel 中使用 LinkButton 得到 0x800a139e 错误
问题描述
我在一个Gridview
里面使用一个UpdatePanel
. 因为Gridview
我使用 a LinkButton
(我有同样的问题imageButton
),CommandArgument
并在用户点击时尝试下载 pdf 文件。
让 Button 在其中运行很棘手,UpdatePanel
但一切似乎都很好。用户单击按钮,我得到正确的 ID 和CommandArgument
. 使用此 ID,我尝试访问Response
pdf 文件,但出现错误:
0x800a139e - JavaScript 运行时错误:Sys.WebForms.PageRequestManagerParserErrorException:无法解析从服务器接收到的消息。
UpdatePanel
pdf文件在服务器上,在我得到正确的pdf文件之外有一个按钮。那么我必须改变什么才能让它进入UpdatePanel
运行状态?谢谢
网格视图:
<asp:TemplateField HeaderText="" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:LinkButton ID="Fehlermeldung" runat="server" CommandArgument='<%#Eval("ID")%>' OnClick="Fehlermeldung_Click1">
<asp:Image ID="Fehler" ImageUrl="~/images/fehlermeldung.png" ToolTip="Fehlermeldung anzeigen" runat="server" />
</asp:LinkButton>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
后面的代码:
protected void Fehlermeldung_Click1(object sender, EventArgs e)
{
string id = ((LinkButton)sender).CommandArgument;
Response.ClearHeaders();
Response.ContentType = "application/pdf";
Response.Clear();
Response.AppendHeader("Content-Disposition", "attachment;Filename=Fehlermeldung_" + id + ".pdf");
Response.TransmitFile(Page.MapPath(@"App_Data\Fehlermeldung_" + id + ".pdf"));
Response.End();
}
解决方案
问题是你的Fehlermeldung
链接按钮包含在里面TemplateField
,因此你不能像平常LinkButton
那样直接引用它。
您应该处理RowDataBound
事件GridView
以通过其控件名称查找链接按钮,并使用RegisterPostBackControl()
(GridViewName
是您的网格视图 ID)以编程方式将按钮回发触发器放在那里:
ASPX 标记
<asp:GridView ID="GridViewName" OnRowDataBound="GridViewName_RowDataBound" runat="server" ...>
<%-- gridview contents --%>
</asp:GridView>
背后的代码
protected void GridViewName_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
// find link button first
LinkButton btn = e.Row.FindControl("Fehlermeldung") as LinkButton;
// use postback trigger assignment
ScriptManager.GetCurrent(Page).RegisterPostBackControl(btn);
}
}
参考:
Sys.WebForms.PageRequestManagerParserErrorException:无法解析从服务器接收到的消息
推荐阅读
- fiware - 如何根据实体类型授予权限?
- xamarin.forms - 手机重启后“不幸的是应用程序已停止”错误
- spring-boot - 在 systemd 的 spring boot 服务文件中在哪里指定特定的端口号?
- javascript - 操作数组的对象属性
- azure - 如何从 Azure 活动目录获取 postman 中的用户声明?
- sql - 如何编写 SQL 查询以忽略具有空值的重复行
- couchdb - 524 响应没有 CORS 标头
- docker - 绕过 --password-stdin 警告(docker)
- java - 数组| 使用数组除法查找重复整数?
- scheduled-tasks - 切割具有定义长度的管子(具有恒定数量的项目类型的箱包装)