我们当前的项目正在利用在线找到的以下代码片段根据需要将用户引导到移动视图:
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)
在每个页面调用中都会调用该函数。
那里发生了什么事?