0

現在のプロジェクトでは、オンラインで見つけた次のコード スニペットを利用して、必要に応じてユーザーをモバイル ビューに誘導しています。

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)はすべてのページ呼び出しで呼び出されます。

何が起こっているのですか?

4

1 に答える 1