gpt4 book ai didi

caching - TagHelper 通过调用 GetChildContentAsync() 和 Content.GetContent() 缓存输出

转载 作者:行者123 更新时间:2023-12-02 04:40:04 26 4
gpt4 key购买 nike

根据 this article如果我们使用多个标签助手(针对同一个标签)并且在每个标签助手中我们将使用 await output.GetChildContentAsync() 来接收 html 内容,我们将遇到缓存输出的问题:

The problem is that the tag helper output is cached, and when the WWW tag helper is run, it overwrites the cached output from the HTTP tag helper.

问题已通过使用以下语句解决:

   var childContent = output.Content.IsModified ? output.Content.GetContent() : 
(await output.GetChildContentAsync()).GetContent();

此行为的描述:

The code above checks to see if the content has been modified, and if it has, it gets the content from the output buffer.

问题是:
1) TagHelperOutput.GetChildContentAsync()TagHelperOutput.Content.GetContent() 有什么区别?
2) 哪个方法将结果写入缓冲区?
3) “缓存输出”是什么意思:ASP.NET MVC Core 缓存初始 razor 标记或 html 标记作为 TagHelper 调用的结果?

提前致谢!

最佳答案

其他答案的解释对我来说不是很清楚,所以我测试了一下,这里是总结:

  • await output.GetChildContentAsync(); ⇒ 获取 Razor 文件中硬编码的标签内的原始内容。请注意,它将在第一次调用时被缓存,并且在后续调用中永远不会更改,因此它不会反射(reflect)其他 TagHelper 在运行时所做的更改!

  • output.Content.GetContent(); ⇒ 应该只用于获取一些 TagHelper 修改的内容,否则它返回 Empty!

使用示例:

获取最新内容(无论是初始 Razor 还是其他标签助手修改的内容):

var curContent = output.IsContentModified ? output.Content : await output.GetChildContentAsync();
string strContent = curContent.GetContent();

关于caching - TagHelper 通过调用 GetChildContentAsync() 和 Content.GetContent() 缓存输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38310227/

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