【发布时间】:2015-02-10 19:00:08
【问题描述】:
我在一个带有两个链接按钮的 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);
}
【问题讨论】:
-
当你通过代码..并且你点击第二个链接..它首先进入
Page_Load事件..?如果是这样,那么您发生了一些 AutoPostBack,或者您需要编码/检查If(IsPostBack){} -
@MethodMan:每次回发都会导致整个页面的生命周期发生。所以每次回发都会引发
Page_Load,即使使用UpdatePanel。根据上面的代码,UpdatePanel默认为ChildrenAsTriggers="True"和UpdateMode="Always",所以无论你点击什么按钮,几乎所有事情都会导致回发。 -
他正在使用更新面板@fnostro
-
是的 - 两次 - 我可以看到。您是否暗示不会发生完整的回发?