我想根据我塞在传递切换视图......我可以确认的蛞蝓和逻辑是正确的,但我的观点是没有发现:MVC4(FixedRazorViewEngine)没有找到我的看法
全球.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”。有什么我做错了吗?
也许不相关,但:您是否检查过有像“viewName.red.csthml”这样的结果对应的文件?检查结果的“SearchedLocations”以查看它是否看起来不在您期望的位置... –