0

渡したスラッグに基づいてビューを切り替えようとしています...スラッグとロジックが正しいことを確認できますが、ビューが見つかりません:

Global.asax.cs:

ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new DeviceCapableViewEngine());

            DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("mobile")
            {
                ContextCondition = Context => Context.Request.Browser["IsMobile"] == "True"
                                                && Context.Request.Browser["IsTablet"] == "False"
            });

            DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("")
            {
                ContextCondition = Context => Context.Request.Browser["IsMobile"] == "False"
                                                || Context.Request.Browser["IsTablet"] == "True"
            });

DeviceCapableViewEngine:

   public class DeviceCapableViewEngine : FixedRazorViewEngine
    {
        public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)
        {
            ViewEngineResult result = null;
        switch (ThemeContext.GetTheme())
        {
            case "Blue":
                result = base.FindView(controllerContext, string.Format("{0}.{1}", viewName, "blue"), masterName, useCache);
                break;
            case "Red":
                result = base.FindView(controllerContext, string.Format("{0}.{1}", viewName, "red"), masterName, useCache);
                break;
        }

        if (result == null || result.View == null)
            result = base.FindView(controllerContext, viewName, masterName, useCache);

        return result;
    }

私はかなり標準的な設定をしており、「青」または「赤」のブレークポイントがヒットしていることを確認できます。もしそうなら、私はMVCに「.mobile」を挿入させたくない...代わりに「viewName.red」にしたい...それでも私のDDRでは常に.mobileをベースコール、これは本当ですか?

何があっても「viewName.mobile」を返します。私が間違っていることはありますか?

4

1 に答える 1