【问题标题】:does ViewResult contains response?ViewResult 是否包含响应?
【发布时间】:2019-08-08 11:55:52
【问题描述】:

如果我们查看 action 方法返回的 ViewResult 对象,ViewResult 实现 ActionResult(implements IActionResult) 为

public class ViewResult : ActionResult
{
  ...
  public override Task ExecuteResultAsync(ActionContext context); 
}

ExecuteResultAsync 似乎是产生响应的人。

但我总是被告知 Razor 将 CSHTML 文件转换为 C# 类,编译它们,然后在每次需要视图来生成结果时创建新实例。下面是 Razor 为 Index.cshtml 视图创建的 C# 类

public class ASPV_Views_Home_Index_cshtml : RazorPage<string[]> {
   ...
   public override async Task ExecuteAsync() {
      WriteLiteral(@"<!DOCTYPE html><html><head> ...
   }
}

所以ExecuteAsync 似乎也产生了响应?

【问题讨论】:

    标签: c# asp.net-mvc asp.net-core-mvc


    【解决方案1】:

    ViewResult 被框架执行时(即调用ViewResult.ExecuteResultAsync ),它负责 1. 创建代表正确 cshtml 文件(视图和布局)的IView 和 2. 将此信息提供给IViewEngine。视图引擎负责编译页面内容并将其写入输出流(即调用IRazorPage.ExecuteAsync Method)。

    所以,ViewResult 只是加载它需要的所有内容,最后,IRazorPage.ExecuteAsync 才是真正写入输出流的那个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-08
      • 1970-01-01
      • 2018-02-13
      • 1970-01-01
      • 2023-01-09
      • 1970-01-01
      • 2011-06-09
      相关资源
      最近更新 更多