2017-02-26 5 views
1

ウェブサイトのローカライゼーションがmvcコントローラーのすべての要求に対して現在のスレッドを読み込み、その情報に基づいて部分ビューが読み込まれる(各言語の部分ビューが異なるため)部分文字列以外の文字列は、リソース文字列を使用してローカライズされます。スレッドが変更されている場合のコントローラーアクションのキャッシング

コントローラローカライズのカスタム属性

[Localize] 
public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     string partialView = string.Empty; 
     switch (Thread.CurrentThread.CurrentCulture.ToString()) 
     { 
      case "en-US": 
      partialView = "english"; 
      .... 
     } 
     ViewBag.PartialViewName = partialView; 
     return View(); 
    } 
} 

を設定するには、データアノテーションを使用して、私の質問は:どのように私は は、7種類の言語があることを知って、このIndexアクションをキャッシュすることができますか?

アップデート: 私は例えば

[OutputCache(Duration = 300)] 
public ActionResult Index() 
{} 

を使用している場合、私はスイッチング言語能力を失っています。

public override string GetVaryByCustomString(HttpContext context, string arg) 
{ 
    if (arg.Equals("CurCulture")) 
    { 
     var culture = Thread.CurrentThread.CurrentUICulture; 
     return culture; 
    } 

    return base.GetVaryByCustomString(context, arg); 
} 

今、あなたのoutputcacheがキャッシュされ、あなたの意見を、現在のユーザーに基づいて:

+0

どうやってキャッシングしていますか? – DavidG

答えて

3

あなたはglobal.asax.csは、次のカスタムパラメータでわずかキャッシュプロジェクトで

[OutputCache(Duration = 3600, VaryByCustom = "CurCulture")] 

を追加することができますui文化。

コントローラー間に複数のVaryByCustom属性がある場合は、その方法をアディションロジックで強化する必要があります。

参考:https://msdn.microsoft.com/en-us/library/5ecf4420.aspx

OutputCacheで
1

使用VaryByCustomプロパティはまた、あなたが(そう、あなたのGlobal.asaxの中のHttpApplicationクラスでGetVaryByCustomString(のHttpContextコンテキスト、文字列カスタム)をオーバーライドすることができ

[OutputCache(VaryByCustom = "CultureCode")] 

属性。 csファイル)、あなたの現在の文化を返すロジックを追加してください。

関連する問題