我创建了一个基本的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);
}
答案 0 :(得分:0)
要完全消除浏览器端,我会附加一个随机的url参数。我会注意到,大多数主要的javascript库都使用它们的ajax功能透明地执行此操作。
答案 1 :(得分:0)
听起来像你应该放置一些日志记录或许多断点来确定哪个方法被调用的顺序。
我怀疑网格绑定发生在您的下一页代码的无序状态。
答案 2 :(得分:0)
伙计们,我发现为什么会出现这种奇怪的行为,用户控件中有一个OutputCache指令,用于缓存内容5秒钟。