2011-01-26 15 views
0

GridViewと検索とページングのための簡単なコントロールを備えた基本的なasp.netページを作成しました。 「次のページ」ボタンをクリックすると、出力が以前のポストバックとまったく同じになることがあります。ASP.NETはランダムにキャッシュ出力を出力します

この現象は、通常のポストバックと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); 

} 
+0

いくつかのコードを投稿できますか?どこからデータを取得してグリッドにバインドするかは、ページ上のグリッド定義と同様に役立ちます。 –

答えて

0

は完全にブラウザ側を排除するために、私はランダムなURLパラメータを添付します。主要なjavascriptライブラリのほとんどが、これをajaxの機能で透過的に行うことに注意してください。

0

私には、どのメソッドがどのような順序で呼び出されているかを正確に識別するために、いくつかのロギングまたはブレークポイントを配置する必要があります。

私はグリッドバインディングが次のページコードの順不同で起こっていると思われます。

+0

この注文は無作為に(時にはうまくいく)変更されますか? – leandrosa81

+0

私は多くのブレークポイントを入れて、うまくいかないときは、ユーザーコントロール(Dashboard_search)のOnPreRenderイベントが呼び出されないので、そのイベント(Dashboard_search1_OnNeedSubs)は決してトリガーされないことを発見しました。 – leandrosa81

0

私はなぜこのような奇妙な振る舞いをしていたのか、5秒間コンテンツをキャッシュするためにユーザーコントロールにOutputCacheディレクティブがあることを知りました。

関連する問題