Я создал базовую страницу asp.net с GridView и простыми элементами управления для поиска и подкачки страниц.Если я нажимаю кнопку «Следующая страница», иногда выходные данные точно такие же, как и у предыдущего постбэка, иногда это правильный вывод.
Такое поведение было обнаружено при использовании обычных и ajax-постбэков.И я использовал Fiddler и подтвердил, что браузер не кэширует вывод.
И я не использую никакую директиву outputcache.
Пример: откройте страницу, нажмите «далее», это все еще страница1. нажмите «Далее» еще раз, теперь это страница 3.
Это совершенно случайно, иногда работает нормально, иногда нет.Кто-нибудь знает, что может быть причиной такого поведения?
Страница ASPX:
<asp:Panel ID="PanelSearch" runat="server" GroupingText="Search Result" HorizontalAlign="Left"
Width="100%" Style="clear: both">
<uc1:dashboard_search ID="Dashboard_search1" runat="server" OnOnNeedSubs="Dashboard_search1_OnNeedSubs" /><br />
<asp:Button ID="btnBack" runat="server" Text="Previous page" Visible="false"
onclick="btnBack_Click" />
<asp:Label ID="lblPageNumber" runat="server"></asp:Label>
<asp:Button ID="btnNext"
runat="server" Text="Next Page" Visible="false"
onclick="btnNext_Click"/>
<asp:HiddenField ID="hidPageNumber" runat="server" Value="0" />
</asp:Panel>
Этот код находится внутри UpdatePanel (но без UpdatePanel все равно происходит то же самое).
Это код, стоящий за кодом:
public void Dashboard_search1_OnNeedSubs(object sender, SubSSDEventArgs e)
{
e.SubSSDs = doSearch();
}
protected List<SubSSD> doSearch()
{
// [filter code]
int total = SubSSD.getTotalNumber();
int page = Convert.ToInt32(hidPageNumber.Value);
if (page == 0)
btnBack.Visible = false;
else
btnBack.Visible = true;
if (page + 26 >= total)
btnNext.Visible = false;
else
btnNext.Visible = true;
lblPageNumber.Text = "Page " + Convert.ToInt32((page / 25) + 1) + "/" + Convert.ToInt32((total / 25) + 1);
List<SubSSD> subssds = SubSSD.search(page, page + 26);
return subssds;
}
protected void btnBack_Click(object sender, EventArgs e)
{
int page = Convert.ToInt32(hidPageNumber.Value);
hidPageNumber.Value = Convert.ToString(page - 25);
}
protected void btnNext_Click(object sender, EventArgs e)
{
int page = Convert.ToInt32(hidPageNumber.Value);
hidPageNumber.Value = Convert.ToString(page + 25);
}