首页 > 解决方案 > 在 GridView 和 UpdatePanel 中使用 LinkBut​​ton 得到 0x800a139e 错误

问题描述

我在一个Gridview里面使用一个UpdatePanel. 因为Gridview我使用 a LinkButton(我有同样的问题imageButton),CommandArgument并在用户点击时尝试下载 pdf 文件。

让 Button 在其中运行很棘手,UpdatePanel但一切似乎都很好。用户单击按钮,我得到正确的 ID 和CommandArgument. 使用此 ID,我尝试访问Responsepdf 文件,但出现错误:

0x800a139e - JavaScript 运行时错误:Sys.WebForms.PageRequestManagerParserErrorException:无法解析从服务器接收到的消息。

UpdatePanelpdf文件在服务器上,在我得到正确的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();
    }

标签: asp.netgridviewupdatepanelimagebuttonasplinkbutton

解决方案


问题是你的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:无法解析从服务器接收到的消息


推荐阅读