Asp.net mvc 3 如何实施";级联;查看引擎结果?

Asp.net mvc 3 如何实施";级联;查看引擎结果?,asp.net-mvc-3,viewengine,Asp.net Mvc 3,Viewengine,我正在为检测到的视图名称添加移动扩展 以下是当前代码: public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache) { string GroupName = System.Configuration.ConfigurationManager.AppSettings["GROUP"];

我正在为检测到的视图名称添加移动扩展

以下是当前代码:

public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)
{
        string GroupName = System.Configuration.ConfigurationManager.AppSettings["GROUP"];

        return base.FindView(controllerContext, viewName + "_" + GroupName, masterName, useCache);
}
因此,如果路径转到
SomeController
,并且应用程序设置说该组是“TeamA”(例如),则将呈现的视图将是
Index\u TeamA.cshtml

但是,如果没有
Index\u TeamA.cshtml
,那么它会像人们所期望的那样默认为Index.cshtml

(这是因为某些团队所要求的某些视图存在细微差异。)

但是,现在我想为移动版本添加另一个级别:

public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)
{
        string GroupName = System.Configuration.ConfigurationManager.AppSettings["GROUP"];

        if (HttpContext.Current.Request.Browser.IsMobileDevice)
             GroupName += "_MOB";

        return base.FindView(controllerContext, viewName + "_" + GroupName, masterName, useCache);
}
但是,问题是如果未找到
Index\u TeamA\u MOB.cshtml
,它将默认为
Index.cshtml
,而实际上我希望它默认为
Index\u TeamA.cshtml

很清楚为什么会发生这种情况,问题是如何级联这种实现?因此,它首先检查组版本的移动版本(如果检测到移动浏览器),然后如果没有,则返回到组版本,如果没有,则获取默认视图

更新,这里是版本1

EDIT:Ok这显然会导致无限循环。

public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)
        {
            string GroupName = System.Configuration.ConfigurationManager.AppSettings["GROUP"];

            if (HttpContext.Current.Request.Browser.IsMobileDevice)
            {
                var result = ViewEngines.Engines.FindView(controllerContext, viewName + "_" + GroupName + "_MOB", masterName);

                if (result != null)
                    return base.FindView(controllerContext, viewName + "_" + GroupName + "_MOB", masterName, useCache);
            }

            return base.FindView(controllerContext, viewName + "_" + GroupName, masterName, useCache);
        }

啊哈!似乎最好的答案是实现为MVC 3提供的新MVC 4方法。请查看我找到的这篇博文:

这是一个很好的解决方案,因为它不仅可以工作,而且可以让我以更少的麻烦升级