在回发后下载的PageRequestManagerParserErrorException

时间:2018-03-25 08:10:53

标签: asp.net download updatepanel repeater

我的UpdatePanel中有一个Repeater包含三个ascx,如下所示:

<asp:UpdatePanel ID="myUpdatePanel" runat="server">
    <ContentTemplate>
        <%-- Info (Repeater 1)--%>
        <div id="info" class="tab-pane">
            <asp:Repeater ID="rptInfo" runat="server">
                <ItemTemplate>
                    <asp:LinkButton runat="server"
                        ID="lnkSaveInfo"
                        CommandName="saveInfo"
                        ClientIDMode="AutoID" />
                </ItemTemplate>
            </asp:Repeater>
        </div>

        <%-- Documents (Repeater 2)--%>
        <div id="documents" class="tab-pane">
            <asp:Repeater ID="rptDocumentDefs" runat="server">
                <ItemTemplate>

                    <table class="table table-striped table-bordered table-hover">
                        <%-- subDocuments (Repeater 3)--%>
                        <asp:Repeater ID="rptSubDocumnets" runat="server" OnItemCommand="rptSubDocumnets_ItemCommand" OnItemDataBound="rptSubDocumnets_ItemDataBound">
                            <ItemTemplate>
                                <tr class="rgRow">
                                    <td>
                                        <asp:LinkButton runat="server"
                                            ID="LnkDownLoadDocument"
                                            CommandName="downLoadDocument"
                                            ClientIDMode="AutoID">
                                        </asp:LinkButton>
                                    </td>
                                </tr>
                            </ItemTemplate>
                        </asp:Repeater>
                    </table>

                </ItemTemplate>
            </asp:Repeater>
        </div>

    </ContentTemplate>
</asp:UpdatePanel>

代码

public void rptSubDocumnets_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{
    ScriptManager scriptMan = ScriptManager.GetCurrent(this.Page);
    scriptMan.RegisterPostBackControl(e.Item.FindControl("LnkDownLoadDocument") as LinkButton);
}

如果我点击LnkDownLoadDocument,那么下载文件就可以正常运行,但如果我点击lnkSaveInfo,之后点击LnkDownLoadDocument,我会收到如下错误:

  

未捕获错误:Sys.WebForms.PageRequestManagerParserErrorException:   无法解析从服务器收到的消息。共同   导致此错误的原因是通过调用修改响应   Response.Write(),响应过滤器,HttpModules或服务器跟踪是   启用。详细信息:解析&#39;�PNG

附近时出错

我在很多项目中都使用了下载方法,它运行正常,在我调试代码时,服务器端没有任何错误。

我的问题中没有一个解决方案正常运作

我尝试了许多解决方案,它们与我的问题类似,如下所示,但它们都没有正常工作,我决定提出新问题。

Download Item With Response

How to do AsyncPostBackTrigger for the LinkButton in the Repeater

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

如果有人可以解释此问题的解决方案,那将非常有帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

创建一个单独的方法来循环Repeater中的所有项目并在那里附加PostBack触发器。

private void bindPosdtBackToRepeaterButtons()
{
    foreach (RepeaterItem item in rptDocumentDefs.Items)
    {
        ScriptManager scriptMan = ScriptManager.GetCurrent(this.Page);
        scriptMan.RegisterPostBackControl(item.FindControl("LnkDownLoadDocument") as LinkButton);
    }
}

lnkSaveInfo处理程序中调用此方法。您也可以使用它而不是DataBound事件来保存一些代码行。执行Repeater DataBind()后调用此方法。