Ошибка при отображении pdf: Sys.WebForms.PageRequestManagerParserErrorException: сообщение, полученное от сервера, не может быть проанализировано

Я пытаюсь вытащить файл PDF из SQL и отобразить его пользователю. Я продолжаю получать следующую ошибку: Sys.WebForms.PageRequestManagerParserErrorException: сообщение, полученное от сервера, не может быть проанализировано.

Мой проект использует asp.net для загрузки сетки, которая содержит кнопку ссылки на запись базы данных, содержащую pdf.

Когда пользователь нажимает кнопку ссылки, PDF-файл должен быть извлечен из SQL и отображен с помощью Response.BinaryWrite.

Вот мой aspx-код:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="ReturnedReports.aspx.cs" Inherits="PP.ApKPI.WEB.ReturnedReports" %>
<asp:Content ID="Content2" ContentPlaceHolderID="HeaderContent" runat="server">
    <h1>Reports</h1>
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="MainContent" runat="server">

    <asp:UpdatePanel ID="ReportsUpdatePanel" runat="server">
        <ContentTemplate>
            <asp:Panel ID="ReportsPanel" runat="server" Height="611px">
                <h2>
                    Reports
                </h2>
                <asp:Label ID="ReportsNotification" runat="server"></asp:Label>
                <br />
                <asp:Label ID="Label1" runat="server" Text="Pharmacy: "></asp:Label>
                <asp:DropDownList ID="PharmaciesDropDownList" runat="server" AutoPostBack="true"
                    OnSelectedIndexChanged="PharmaciesDropDownList_SelectedIndexChanged">
                </asp:DropDownList>
                <br />
                <br />
                <%--<asp:Button ID="NewReport" runat="server" Text="Add Data" OnClick="NewReport_Click" />--%>
                <asp:GridView ID="ListReportsGridView" runat="server" AllowPaging="true" AllowSorting="true"
                    GridLines="None" PageSize="10" CssClass="GridView" AutoGenerateColumns="false"
                    EmptyDataText="No rows for selection." OnRowCommand="ListReportsGridView_RowCommand"
                    OnPageIndexChanging="ListReportsGridView_PageIndexChanging"
                    OnRowDataBound="ListReportsGridView_RowDataBound" 
                    EnablePersistedSelection="True"
                    DataKeyNames="FinDataID">
                    <AlternatingRowStyle CssClass="GridViewAltRow" />
                    <HeaderStyle CssClass="GridViewHeader" />
                    <RowStyle CssClass="GridViewItem" />
                    <PagerStyle CssClass="GridViewPager" />
                    <Columns>
                        <asp:BoundField DataField="ID" HeaderText="ID" ControlStyle-CssClass="Hidden" ItemStyle-CssClass="Hidden"
                            HeaderStyle-CssClass="Hidden" FooterStyle-CssClass="Hidden" />
                        <asp:BoundField DataField="FinDataID" HeaderText="FinDataID" ControlStyle-CssClass="Hidden" ItemStyle-CssClass="Hidden"
                            HeaderStyle-CssClass="Hidden" FooterStyle-CssClass="Hidden" />
                        <asp:BoundField DataField="PeriodStart" HeaderText="Period Start" DataFormatString="{0:dd/MM/yyyy}" />
                        <asp:BoundField DataField="PeriodEnd" HeaderText="Period End" DataFormatString="{0:dd/MM/yyyy}" />
<%--                        <asp:ButtonField DataTextField="FileName" HeaderText="Report" CommandName="ViewRpt" />--%>
                        <asp:TemplateField><ItemTemplate><asp:LinkButton ID="LinkButtonViewRpt" Text='<%#Eval("FileName") %>' CommandName="ViewRpt" CommandArgument="<%# Container.DataItemIndex %>" runat="server"></asp:LinkButton></ItemTemplate></asp:TemplateField>    
                        <asp:TemplateField Visible="false"><ItemTemplate></ItemTemplate></asp:TemplateField>
                    </Columns>
                </asp:GridView>
                <br />
            </asp:Panel>

    <asp:Panel ID="UploadPanel" runat="server" >
        <h2>Upload Report for
            <asp:Label ID="UPharmacyName" runat="server"></asp:Label>
        </h2>

        <p>
            <table width="360px">
                <tr>
                    <td>Period Start:</td>
                    <td>Period End:</td>
                </tr>
                <tr>
                    <td><asp:Label ID="lblUPeriodStart" runat="server" Width="50px"></asp:Label></td>
                    <td><asp:Label ID="lblUPeriodEnd" runat="server" Width="50px"></asp:Label></td>
                </tr>
            </table>
        </p>
            Select File to Upload:
            <asp:UpdatePanel ID="UploadPanel2" runat="server">
                <ContentTemplate>
                    <%--<asp:FileUpload ID="UploadFile" runat="server" />--%>
                    <asp:FileUpload ID="UploadFile" runat="server" />
                    <p>
                        <asp:Button ID="btnUpload" runat="server" OnClick="btnUpload_Click" 
                            Text="Upload" />
                        <asp:Button ID="btnCancelUpload" runat="server" OnClick="btnCancelUpload_Click" 
                            Text="Cancel" />
                </ContentTemplate>
<%--                <Triggers>
                    <asp:PostBackTrigger ControlID="btnUpload" />
                </Triggers>--%>
            </asp:UpdatePanel>
    </asp:Panel>

        </ContentTemplate>
    </asp:UpdatePanel>
    <asp:Button ID="btnClickMe" runat="server" OnClick="btnClickMe_Click" Visible="false" />
    <p></p>
</asp:Content>

И вот частичный код позади:

private void ViewPdf()
{
    //Response.Clear();
    Response.Buffer = true;
    //Response.ContentType = "application/pdf";
    Response.AddHeader("content-disposition", "attachment;filename=" + objFileData.FileName);
    Response.Charset = "";
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.BinaryWrite(objFileData.Data);
    Response.Flush();
    Response.End();
}

Как видите, я пробовал использовать невидимые кнопки за пределами UpdatePanel и экспериментировал с PostBackTriggers, но безрезультатно. Я не могу заставить PostBackTrigger работать, потому что моя кнопка ссылки не распознается из UpdatePanel...

Любая помощь будет оценена по достоинству! Дайте мне знать, если потребуется больше кода, подробности. Заранее спасибо!


person s.bramblet    schedule 14.10.2013    source источник


Ответы (2)


Итак, я смог решить эту проблему (хорошо, не я, с кем я работаю)!

Удаление внешней панели UpdatePanel (ReportsUpdatePanel) решило проблему. Я не совсем понимаю, как это решило проблему, но, видимо, это как-то связано с синхронизацией и отправкой заголовка http не по порядку. Если кто-то еще хочет прокомментировать и уточнить это, пожалуйста, сделайте это!

Спасибо.

person s.bramblet    schedule 15.10.2013

удалите asp:AsyncPostBackTrigger для связанной сетки () из asp и добавьте следующий код (согласно вашему коду), это только пример

  1. во время загрузки страницы добавьте ниже коды

    ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page); scriptManager.RegisterPostBackControl(this.ListReportsGridView);

  2. после этого с помощью кнопки автоматического выбора =true . если вам не нужна кнопка, вы можете установить отображение как none в вашей сетке rowbound.

person Karthick    schedule 05.08.2014
comment
Пожалуйста, переформатируйте свой ответ, чтобы он был более четким и удобным для чтения. Используйте теги блока кода. - person donatello; 05.08.2014