我在带有两个链接按钮的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);
}
答案 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();
}