我有一個自定義博客頁面,並且在頁面的右側,我有一個「面板」顯示最受歡迎的博客,另一個顯示他們博客上最多投票的人一週和另外三個這樣的事情。這些面板都是sql重的;他們需要幾秒鐘才能加載。避免在回發中執行緩存的控件
這裏的佈局的粗略概述:與Balsamiq
創建
原型,因爲它們並不必然要經常改變每,我已經分離出他們全部納入器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事件探查器顯示同樣多,所以這是確認的兩倍。
這是預期的行爲?緩存它們的重點是它們永遠不會被執行......然而,每次回覆和刪除它們都會被執行。只有他們沒有執行的時間是新鮮的頁面加載(並且在緩存時間限制內)
那麼,它爲什麼在回發上執行? 我該如何避免它?
感謝
哦,好的,現在就試試看,稍微回來,謝謝 – LocustHorde 2012-03-15 10:38:09
啊哈!就是這樣!我無法告訴你我有多開心,非常感謝! – LocustHorde 2012-03-15 10:46:31
@LocustHorde非常歡迎您,花很多時間來處理類似這樣的問題 – ntziolis 2012-03-15 10:50:25