2013-10-14 26 views
0

我试图将PDF文件从SQL中提取出来并显示给用户。我不断收到以下错误: Sys.WebForms.PageRequestManagerParserErrorException:无法解析从服务器收到的消息。显示pdf时出现错误:Sys.WebForms.PageRequestManagerParserErrorException:无法解析从服务器收到的消息

我的项目是使用asp.net加载一个gridview,其中包含一个linkbutton到包含pdf的数据库记录。

当用户点击linkbutton时,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的工作,因为我的linkbutton不能从UpdatePanel识别...

任何帮助,将不胜感激!让我知道是否需要更多的代码,细节。提前致谢!

回答

0

所以我能够解决这个问题(好吧,不是我和我一起工作的人)!

删除外部UpdatePanel(ReportsUpdatePanel)解决了这个问题。我并不完全理解这是如何解决它的,但显然它与同步和发送http头失序有关。如果其他人想评论和澄清这一点,请做!

谢谢。

0

除去asp:AsyncPostBackTrigger从ASP相关网格(),并添加以下代码(按您的代码),这是网页加载过程中仅举例

  1. 添加以下代码

    的ScriptManager的ScriptManager = ScriptManager.GetCurrent (这一页); scriptManager.RegisterPostBackControl(this.ListReportsGridView);

  2. 然后使用自动选择按钮= true。如果你不需要按钮,你可以设置显示为没有在你的网格rowbound。

+0

请重新格式化您的答案,使其更清晰,更易于阅读。使用代码块标签。 – donatello

相关问题