ASP.NET случайно кэширует вывод - PullRequest
0 голосов
/ 26 января 2011

Я создал базовую страницу 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" />&nbsp;
        <asp:Label ID="lblPageNumber" runat="server"></asp:Label>
        &nbsp; <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);

}

Ответы [ 3 ]

0 голосов
/ 26 января 2011

Звучит так, будто вы должны либо поставить некоторые записи на место, либо установить множество точек останова, чтобы точно определить, какие методы вызываются в каком порядке.

Я подозреваю, что привязка к сетке происходит не по порядкукод вашей следующей страницы.

0 голосов
/ 28 января 2011

Ребята, я выяснил, почему у него такое странное поведение, в пользовательском элементе управления есть директива OutputCache для кэширования содержимого в течение 5 секунд.

0 голосов
/ 26 января 2011

Чтобы полностью исключить сторону браузера, я бы добавил случайный параметр url. Отмечу, что большинство основных библиотек javascript делают это прозрачно с помощью своих функций ajax.

...