gpt4 book ai didi

c# - 为什么 ViewComponentResult.ExecuteResult 方法返回 void?

转载 作者:太空宇宙 更新时间:2023-11-03 14:54:37 25 4
gpt4 key购买 nike

我试图更好地理解 View 组件的“幕后”。我知道标准方法是使用

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

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

不过,也可以通过其他方式使用 View 组件。因此,例如,您可以通过在操作方法中使用 return ViewComponent("MyViewComponent", itsModel); 直接从 Controller 返回 View 。

看起来应该可以轻松地将 View 组件呈现为字符串。我看到在 ViewComponent("MyViewComponent", itsModel); 返回的 ViewComponetResult 上有一个 ExecuteResult 方法。

在 Controller 中可以这样调用:

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

乍一看,我希望这样的方法返回一个 html 字符串。但它返回无效。为什么?如果 ViewComponentResult.ExecuteResult 没有返回结果,它在做什么?以及如何将 ViewComponentResult 呈现为 HTML 字符串?

最佳答案

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

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

例如,如果一个人要调用以下电话:

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

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

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

关于c# - 为什么 ViewComponentResult.ExecuteResult 方法返回 void?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50164661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com