为什么 ViewComponentResult.ExecuteResult 方法 return 无效?

Why Does the ViewComponentResult.ExecuteResult method return void?

我正在尝试更好地理解视图组件上的 "behind the scenes"。我知道标准方法是使用

调用 ViewComponent
 @await Component.InvokeAsync("MyViewComponent", itsModel) 

或 .cshtml 文件中的视图组件标签助手。

但是可以通过其他方式使用视图组件。因此,例如,您可以通过使用操作方法中的 return ViewComponent("MyViewComponent", itsModel); 直接从控制器 return 视图。

似乎应该可以轻松地将视图组件呈现为字符串。我看到 ViewComponetResult return 由 ViewComponent("MyViewComponent", itsModel); 编辑,有一个 ExecuteResult 方法。

在控制器中可以这样调用:

 ViewComponent("MyViewComponent", itsModel).ExecuteResult(this.ControllerContext);

乍一看,我期望这样的方法能够return 一串html。但它 return 无效。为什么?如果没有 return 结果,ViewComponentResult.ExecuteResult 在做什么?我怎样才能将 ViewComponentResult 渲染成 HTML 的字符串?

我终于明白这是怎么回事了。 @TavisJ 的评论提示我并让我朝着正确的方向进行研究。

ViewComponentResult 或更普遍的情况下,在 any ActionResultExecuteResult returns 无效,因为ViewComponent 被写入关联的 HttpResponse.Body。这对于调用的异步版本也是如此,当然它 returns 是一个任务。

例如,如果某人要拨打以下电话:

  await ViewComponent("MyViewComponent", itsModel).ExecuteResultAsync(this.ControllerContext);

要捕获视图组件的 "output",首先需要用他们选择的流替换 this.ControllerContext.HttpResponse.Response.Body,然后再进行 ExecuteResultAsync 调用,以便输出为在流中捕获,然后可以将其转换为字符串。

然后当然应该将原始流放回 this.ControllerContext.HttpResponse.Response.Body 以便视图的其余部分正确呈现。