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方法。请查看我找到的这篇博文: 这是一个很好的解决方案,因为它不仅可以工作,而且可以让我以更少的麻烦升级