2014-02-07 17 views
1

我有mvc4應用程序可用兩種語言。緩存頁面取決於所選語言

現在我有一個緩存的問題,我與輸出緩存試圖像

[OutputCache(Duration = 3600, VaryByHeader="Accept-Language")] 
public ActionResult Home() {...} 

但這解決不了任何問題,頁面緩存,當我改變語言沒有任何反應,以前緩存的頁面仍然存在,直到緩存過期。我不確定這個VaryByHeader="Accept-Language是否與我的網頁本地化設置相匹配。

當用戶點擊一個語言標記某個整數值(其表示當前語言)被存儲內部cookie,並且輔助稱爲讀取的cookie,並設置使用Thread.CurrentThread.CurrentUICulture = ...

所以我怎樣才能緩存取決於頁相應的語言所選語言,如果它有任何價值,那麼只有兩種語言。

回答

1

您將需要一個自定義的參數,以便添加到的OutputCache爲各種語言的工作。

看看this blog post,它在解釋過程中表現出色,特別是OutputCache and Localization部分。

的博客文章對MVC2面向不過,但它也應該適用於MVC4一樣的。

0

覆蓋GetVaryByCustomStringglobal.asax.cs

public override string GetVaryByCustomString(HttpContext context, string value) 
{ 
    if (value.Equals("lang")) 
    { 
     return Thread.CurrentThread.CurrentUICulture.Name; 
    } 
    return base.GetVaryByCustomString(context,value); 
} 

現在寫您的OutputCacheAction像下面的代碼:

[OutputCache(Duration=3600,VaryByParam="none", VaryByCustom="lang")] 
public ActionResult Index() 
{ 
    // My Codes .... ;) 
    return View(); 
} 

注: 在我來說,我已經寫了在自定義中設置語言代碼ControllerFactory類,它是GetVaryByCustomString方法燒製(它被髮射後)和緩存這個問題的原因失敗基於操作的用戶選擇的語言。所以,我提出我的設置語言Application_BeginRequest方法內部Global.asax.cs文件,現在它的工作原理。


我寫了一個基於對@DimitryKhaykin在他的回答寫裏面所以答案中提到的link這個答案。