从控制器动作返回ActionResult实际上是在那一刻执行视图吗?

时间:2016-03-28 13:35:55

标签: asp.net-mvc

从控制器返回ActionResult时是否执行了视图?或者ActionResult只是对稍后执行的内容的引用?

我在控制器操作中的一些ActionResult返回周围放置了缓存。在控制器操作中考虑这一点:

if(isCached(someKey))
{
   return cachedActionResult;
}
else
{
   var model = new ALazyLoadedModel();
   return View(model);
}

因此,在第一次执行之后,从缓存返回整个ActionResult对象。 (该模型具有一堆延迟加载的属性,因此执行的“痛苦”是当从视图中调用这些属性时。因此,模型的执行和视图的执行基本相同。)

然而,性能提升并非我所希望的,当我在模型的创建和视图的返回周围放置一些时间时,它显然在几分之一毫秒内执行 - {{1} }说它返回只需0.0958毫秒(因此,大约是1/100000秒)。基于该模型/视图的作用,我发现这有点难以置信。

这是我怀疑的 - Stopwatch的返回实际上并不执行视图,它只是初始化视图并返回对它的引用,稍后执行。如果这是真的,那么这个缓存策略显然无济于事。

我怀疑对吗?或者ActionView确实执行了视图,我的视图执行显然比我想象的快得多?

1 个答案:

答案 0 :(得分:1)

是的,ASP.NET MVC的核心思想是控制器方法的结果是执行某些操作的意图,而不是执行的结果。

return View(model)字面意思是告诉框架,请查看与此方法相对应的视图,并使用此模型进行渲染。所有这些工作都将在控制器的方法之外,在调用它的代码中进行。