在GridView和UpdatePanel中使用LinkBut​​ton会收到0x800a139e错误

时间:2018-10-23 07:51:07

标签: asp.net gridview updatepanel imagebutton asplinkbutton

我在Gridview内使用UpdatePanel。在该Gridview中,我为LinkButton使用了imageButton(我对CommandArgument有同样的问题),并在用户单击时尝试下载pdf文件。

UpdatePanel中运行Button是很棘手的,但是一切似乎都很好。用户单击按钮,我将得到带有CommandArgument的正确ID。使用此ID,我尝试Response pdf文件,但收到错误:

  

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

pdf文件在服务器上,在UpdatePanel外面有一个按钮,我得到了正确的pdf文件。那么,为了使它在UpdatePanel内部运行,我需要更改什么?谢谢

Gridview:

 <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();
    }

1 个答案:

答案 0 :(得分:1)

问题是您的Fehlermeldung链接按钮包含在TemplateField中,因此您不能像普通LinkButton那样直接引用它。

您应该处理RowDataBound的{​​{1}}事件,以其控件名称查找链接按钮,并使用GridView以编程方式在此放置按钮回发触发器(RegisterPostBackControl()是您的网格查看ID):

ASPX标记

GridViewName

背后的代码

<asp:GridView ID="GridViewName" OnRowDataBound="GridViewName_RowDataBound" runat="server" ...>
    <%-- gridview contents --%>
</asp:GridView>

参考:

Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed