我正在检测视频名称时为其添加移动扩展程序。
以下是当前代码:
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_TeamA.cshtml
。
但是如果没有Index_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_TeamA_MOB.cshtml
,则默认为Index.cshtml
,当我实际希望它默认为Index_TeamA.cshtml
时。
很清楚为什么会发生这种情况,问题是我如何级联这个实现呢?因此,它首先检查组版本的移动版本(如果检测到移动浏览器),那么如果不存在回退到组版本,那么如果没有那么获得默认视图?
更新,此处为版本1
编辑:好的,显然会导致无限循环。
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);
}
答案 0 :(得分:0)
这是一个很好的解决方案,因为它不仅可以工作,而且可以让我以更少的麻烦进行升级!