似乎(虽然是调试查看器),ViewEngines
在ViewEngines
集合中都是(razor + webforms,我正在使用第一个),并且它们都可以查找视图(手动)并显示它们,也尝试手动。
那么为什么他们不能自己做呢?这只是一种行动方法,仅此而已:
public ViewResult Login()
{
return View();
}
我已覆盖OnResultExecuting
方法:
protected override void OnResultExecuting(ResultExecutingContext filterContext)
{
if (filterContext.Result is ViewResult)
{
if (((ViewResult)filterContext.Result).ViewEngineCollection.Count == 0)
{
((ViewResult)filterContext.Result).ViewEngineCollection.Add(new RazorViewEngine());
}
}
base.OnResultExecuting(filterContext);
}
事实证明,我现在每次和每个视图都需要向IViewEngine
添加新的ViewResult
。那为什么会这样呢?即使ViewEngines.Engines
集合不为空?
ViewEngineCollection
在空闲的某个时刻停止为空。
答案 0 :(得分:1)
您是否定义了母版页?
如果解决方案的根目录中有_ViewStart.chstml文件,则引擎可能会尝试加载母版页以与您的视图结合。
要跳过母版页,请告诉您的视图不要使用母版页。将以下内容添加到视图
@{
Layout = null;
}
或确保_viewStart.cshtml文件中引用的母版页存在。
答案 1 :(得分:0)
您可能没有正确ViewEngines
配置(或没有)。
尝试添加手动查看引擎,以确定某处是否存在配置错误。
将此类内容添加到Application_Start()
的{{1}}方法。
Global.asax
这应该初始化Razor视图引擎,如果mvc开始搜索位置,你就会以某种方式关闭配置中的剃刀。
答案 2 :(得分:0)
ViewEngineCollection
在空闲的某个时刻停止为空。
这可能只涉及旧程序集的一些ASP.NET缓存,这些缓存由于某些原因而未被新程序集更新。这种情况经常发生,我必须清除缓存才能使一些新代码生效。