【问题标题】:Does returning an ActionResult from a controller action actually execute the view at that moment?从控制器操作返回 ActionResult 是否真的在那个时候执行视图?
【发布时间】:2016-03-29 00:04:23
【问题描述】:

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

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

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

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

然而,性能提升并不是我所希望的,当我在模型的创建和视图的返回上安排一些时间时,它显然是在几分之一毫秒内执行的——Stopwatch 说返回只需要 0.0958 毫秒(因此,大约是 1/100,000 秒)。根据该模型/视图的作用,我觉得这有点难以置信。

这就是我的怀疑——ActionView 的返回实际上并没有执行视图,它只是初始化视图并返回对它的引用,稍后执行。如果这是真的,那么显然这种缓存策略根本没有帮助。

我的怀疑是对的吗?还是return View() 确实执行了视图,而我的视图执行显然比我想象的要快很多?

【问题讨论】:

  • cachedActionResult 在您的情况下仅包含返回视图的 intention 视图,而不是实际呈现的视图。您需要输出缓存来收集整个响应。

标签: asp.net-mvc


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2010-09-13
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-26
    • 1970-01-01
    相关资源
    最近更新 更多