Я пытаюсь вытащить файл 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...
Любая помощь будет оценена по достоинству! Дайте мне знать, если потребуется больше кода, подробности. Заранее спасибо!