現在のプロジェクトでは、オンラインで見つけた次のコード スニペットを利用して、必要に応じてユーザーをモバイル ビューに誘導しています。
DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("Mobile")
{
ContextCondition = (context => RequirementsHelper.BrowserIsMobile(context.GetOverriddenUserAgent()))
});
これにより、ユーザー エージェント文字列に応じて、ユーザーを index.cshtml または index.mobile.cshtml に簡単に誘導できます。ここまでは順調ですね。
この考えを拡張して、私は DisplayModeProvider に基づくローカリゼーション エンジンを実装したくなりました (サイトの異なるバージョンは、見た目が大きく異なりますが、機能はほとんど同じであるためです)。
したがって、私の最初の簡単なテストは、次のメソッドを作成することでした。
protected void DisplayNZSkin()
{
System.Web.WebPages.DisplayModeProvider.Instance.Modes.Add(new System.Web.WebPages.DefaultDisplayMode("NZ")
{
ContextCondition = (context => true)
});
}
NZスキンが表示されると判断したときに、これを呼び出すことができます(残念ながら、データベース呼び出しに依存しています)。これが呼び出されると、index.nz.cshtml のレンダリングが強制されるという考えでした。
それは悪い考えでした。このメソッドがコントローラーに存在するだけで、呼び出されず、すべてのページで .nz バージョンがレンダリングされました。ステップスルーすると、コードが常に実行されることがわかります。関数(context => true)
はすべてのページ呼び出しで呼び出されます。
何が起こっているのですか?