在asp.net页面上的gridview页面索引更改期间,Pdf Viewer会刷新

时间:2015-02-10 19:00:08

标签: c# asp.net pdf gridview

我在带有两个链接按钮的asp.net页面上有一个gridview - 一个用于查看pdf,另一个用于下载。单击“查看”时,pdf查看器将显示在文字控件中。这很好用。但是我为gridview启用了分页,当我单击分页链接时,pdf显示刷新,这意味着它将重新加载最后查看的pdf。我猜测它与回发有关,但无法找到解决方案。

<div id="wpaLinks" style="height: 118px;">
            <asp:UpdatePanel ID="UpdatePanel2" runat="server">                         
                <ContentTemplate>
                    <asp:GridView ID="gvWPAs" runat="server" AutoGenerateColumns="False" AllowPaging="true" PageSize="3" CssClass="Grid" AlternatingRowStyle-CssClass="alt"  
                        PagerStyle-CssClass="pgr" EmptyDataText="No Records Found" OnPageIndexChanging="gvWPAs_PageIndexChanging">  <%--OnRowDataBound="gvWPAs_RowDataBound"--%>
                            <AlternatingRowStyle CssClass="alt" />
                            <Columns>
                                <asp:BoundField DataField="fileDescription" HeaderText="File Description" />
                                <asp:TemplateField ItemStyle-HorizontalAlign="Center">
                                    <ItemTemplate>
                                        <asp:LinkButton ID="lnkView" runat="server" Text="View" OnClick="View" CommandArgument='<%# Eval("relPath") %>'></asp:LinkButton>
                                        <asp:LinkButton ID="lnkDownload" Text="Download" CommandArgument='<%# Eval("relPath") %>' runat="server" OnClick="DownloadFile"></asp:LinkButton>
                                    </ItemTemplate>
                                    <ItemStyle HorizontalAlign="Center" />
                                </asp:TemplateField>
                            </Columns>
                        <PagerSettings FirstPageText="First" LastPageText="Last" Mode="NumericFirstLast" PageButtonCount="4" />
                        <PagerStyle CssClass="pgr" />
                    </asp:GridView>
                </ContentTemplate>
            </asp:UpdatePanel>
            </div>


            <asp:UpdatePanel ID="UpdatePanel3" runat="server">
                <ContentTemplate>
                    <asp:Literal ID="ltEmbed" runat="server" />
                </ContentTemplate>
            </asp:UpdatePanel>

代码隐藏是......

protected void gvWPAs_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    gvWPAs.PageIndex = e.NewPageIndex;
    var ctyID = CountyList.SelectedValue;
    var twnID = TwnList.SelectedValue;
    var rngID = RngList.SelectedValue;

    if (ctyID != "0" & twnID == "0" & rngID == "0") // County only
    {
        dsGetCtyWPAs.SelectParameters["ctyID"].DefaultValue = ctyID;
        DataView dvCtyWpa = (DataView)dsGetCtyWPAs.Select(DataSourceSelectArguments.Empty);
        //DataTable dtCtyWpa = dvCtyWpa.ToTable();
        gvWPAs.DataSource = dvCtyWpa;
        gvWPAs.DataBind();
        this.RegisterPostBackControl();
    }

}


protected void View(object sender, EventArgs e)
{
    string pdfIdentifier = (sender as LinkButton).CommandArgument;
    string embed = "<object data=\"{0}{1}\" type=\"application/pdf\" width=\"650px\" height=\"850px\">";
    embed += "If you are unable to view file, you can download from <a href = \"{0}{1}&download=1\">here</a>";
    embed += " or download <a target = \"_blank\" href = \"http://get.adobe.com/reader/\">Adobe PDF Reader</a> to view the file.";
    embed += "</object>";
    ltEmbed.Text = string.Format(embed, ResolveUrl("~/PdfHandler.ashx?pdfPath="), "WpaFiles/" + pdfIdentifier);

}



protected void DownloadFile(object sender, EventArgs e)
{
    string filePath = (sender as LinkButton).CommandArgument;        
    string fileName = Path.GetFileName(filePath);        
    Downloader.Download(fileName, "WpaFiles/" + filePath);
}

2 个答案:

答案 0 :(得分:0)

您的代码重新显示pdf的原因是由于第二个UpdatePanel未被更新/清除。

虽然UpdatePanel中嵌入的控件仍会导致整个页面生命周期发生 - 但关于它们的好处是它们只传回更改。因此,当您在第一个UpdatePanel中更改页面时,您并未在第二个中清除嵌入代码。这可能是也可能不是。

在页面更改时,您需要清除第二个更新面板中的嵌入代码,并确保该面板得到更新

答案 1 :(得分:0)

我在UpdatePanel3上将UpdateMode设置为Conditional

 <asp:UpdatePanel ID="UpdatePanel3" runat="server" UpdateMode="Conditional">                     
                <ContentTemplate>
                    <asp:Literal ID="ltEmbed" runat="server" />
                </ContentTemplate>
            </asp:UpdatePanel>

然后将UpdatePanel3.Update()添加到....

protected void View(object sender, EventArgs e)
{
string pdfIdentifier = (sender as LinkButton).CommandArgument;
string embed = "<object data=\"{0}{1}\" type=\"application/pdf\" width=\"650px\" height=\"850px\">";
embed += "If you are unable to view file, you can download from <a href = \"{0}{1}&download=1\">here</a>";
embed += " or download <a target = \"_blank\" href = \"http://get.adobe.com/reader/\">Adobe PDF Reader</a> to view the file.";
embed += "</object>";
ltEmbed.Text = string.Format(embed, ResolveUrl("~/PdfHandler.ashx?pdfPath="), "WpaFiles/" + pdfIdentifier);
UpdatePanel3.Update();
}