为什么 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 ActionResult
上 ExecuteResult
returns 无效,因为ViewComponent
被写入关联的 HttpResponse.Body
。这对于调用的异步版本也是如此,当然它 returns 是一个任务。
例如,如果某人要拨打以下电话:
await ViewComponent("MyViewComponent", itsModel).ExecuteResultAsync(this.ControllerContext);
要捕获视图组件的 "output",首先需要用他们选择的流替换 this.ControllerContext.HttpResponse.Response.Body
,然后再进行 ExecuteResultAsync
调用,以便输出为在流中捕获,然后可以将其转换为字符串。
然后当然应该将原始流放回 this.ControllerContext.HttpResponse.Response.Body
以便视图的其余部分正确呈现。
我正在尝试更好地理解视图组件上的 "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 ActionResult
上 ExecuteResult
returns 无效,因为ViewComponent
被写入关联的 HttpResponse.Body
。这对于调用的异步版本也是如此,当然它 returns 是一个任务。
例如,如果某人要拨打以下电话:
await ViewComponent("MyViewComponent", itsModel).ExecuteResultAsync(this.ControllerContext);
要捕获视图组件的 "output",首先需要用他们选择的流替换 this.ControllerContext.HttpResponse.Response.Body
,然后再进行 ExecuteResultAsync
调用,以便输出为在流中捕获,然后可以将其转换为字符串。
然后当然应该将原始流放回 this.ControllerContext.HttpResponse.Response.Body
以便视图的其余部分正确呈现。