2012-03-15 47 views
1

我有一個自定義博客頁面,並且在頁面的右側,我有一個「面板」顯示最受歡迎的博客,另一個顯示他們博客上最多投票的人一週和另外三個這樣的事情。這些面板都是sql重的;他們需要幾秒鐘才能加載。避免在回發中執行緩存的控件

這裏的佈局的粗略概述:與Balsamiq

創建 enter image description here

原型,因爲它們並不必然要經常改變每,我已經分離出他們全部納入器WebControls(的.ascx ),他們都有一個輸出緩存:

<%@ OutputCache Duration="7200" VaryByParam="*" VaryByCustom="CacheByModule" %> 

而在global.asax我這有我的自定義緩存變量相匹配:

public override string GetVaryByCustomString(HttpContext context, string custom) 
    { 
    switch (custom.ToLower()) 
    { 
     case "cachebymodule": 
      Request.Url.PathAndQuery.Split('/')[0]; 
      break; 
    } 

      return base.GetVaryByCustomString(context, custom); 
    } 

我基本上是做同樣的事情,我的網站,博客,投票,問卷調查,競猜等不同部位..

當我運行我的網頁的第一次,所有的他們正在執行 - 這是預期的。 在下一次運行 - 它們都沒有執行,這也是預期的。

現在,這種情況每次都會發生 - 當我在博客上發表評論或回覆時,這是一個回發事件,並且我正在使用ajax更新面板進行評論部分,所有右側面板都正在執行!

我怎麼知道這個?好吧,如果我調試應用程序,它們中的斷點正在被回覆和刪除(回發事件)。 SQL事件探查器顯示同樣多,所以這是確認的兩倍。

這是預期的行爲?緩存它們的重點是它們永遠不會被執行......然而,每次回覆和刪除它們都會被執行。只有他們沒有執行的時間是新鮮的頁面加載(並且在緩存時間限制內)

那麼,它爲什麼在回發上執行? 我該如何避免它?

感謝

回答

2

執行它的原因是因爲URL +參數不適合pageLoad的/回傳相同,因此輸出緩存不起作用。
您可以嘗試設置OutputCache VaryByParam="None"以避免URL更改時重置。

<%@ OutputCache Duration="7200" VaryByParam="None" VaryByCustom="CacheByModule" %> 

根據什麼CacheByModule正在做這應該工作。

+0

哦,好的,現在就試試看,稍微回來,謝謝 – LocustHorde 2012-03-15 10:38:09

+0

啊哈!就是這樣!我無法告訴你我有多開心,非常感謝! – LocustHorde 2012-03-15 10:46:31

+2

@LocustHorde非常歡迎您,花很多時間來處理類似這樣的問題 – ntziolis 2012-03-15 10:50:25