带有QueryStringField的DataPager会在UpdatePanel中导致完整的PostBack

时间:2012-11-27 12:38:33

标签: asp.net listview updatepanel datapager

我有一个ListView,其中有三个DataPager关联到它,所有这些都在UpdatePanel内。

第一个DataPager只显示指向上一页的链接:

<asp:DataPager ID="dpPrev" runat="server" PagedControlID="lvExperiences" QueryStringField="page" PageSize="4">
  <Fields>
    <asp:NextPreviousPagerField ShowNextPageButton="false" ButtonCssClass="PagePrev" />
  </Fields>
</asp:DataPager>

第二个用于页面的常规顺序:

<asp:DataPager ID="dpList" runat="server" PagedControlID="lvExperiences" QueryStringField="page" PageSize="4">
  <Fields>
    <asp:NumericPagerField ButtonType="Link" CurrentPageLabelCssClass="PageCurrent" />
  </Fields>
</asp:DataPager>

最后一个是指向下一页的链接:

<asp:DataPager ID="dpNext" runat="server" PagedControlID="lvExperiences" QueryStringField="page" PageSize="4">
  <Fields>
    <asp:NextPreviousPagerField ShowPrevPageButton="false" ButtonCssClass="PagePrev" />
  </Fields>
</asp:DataPager>

我将这些控件分开放置,因此我可以禁用代码中的prev / next链接,具体取决于我们是否在第一页/最后一页:

Protected Sub lvExperiences_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles lvExperiences.DataBound
    Dim page As Integer = 1
    If Not Request("page") Is Nothing Then
        page = Integer.Parse(Request("page"))
    End If
    dpPrev.Visible = ((dpPrev.PageSize * page) > dpPrev.TotalRowCount And (page > 1))
    dpNext.Visible = ((dpNext.PageSize * page) < dpNext.TotalRowCount)
End Sub

它完美无缺,但是,DataPager正在更改网址以添加?page=X,它会生成一个完整的PostBack。如果我从DataBound移除QueryStringField方法和DataPager属性UpdatePanel执行其工作,并仅刷新ListView

有人知道如何在不使用QueryStringField属性的情况下了解当前页面吗?

非常感谢,

1 个答案:

答案 0 :(得分:1)

试试这个:

Protected Sub lvExperiences_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles lvExperiences.DataBound
   dpPrev.Visible = dpPrev.StartRowIndex > 0
   dpNext.Visible = (dpNext.StartRowIndex + dpNext.PageSize) < dpNext.TotalRowCount
End Sub