【问题标题】:TagHelper cached output by calling GetChildContentAsync() and Content.GetContent()TagHelper 通过调用 GetChildContentAsync() 和 Content.GetContent() 缓存输出
【发布时间】:2016-07-11 15:02:02
【问题描述】:

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

问题是标签助手输出被缓存了,当 WWW 标签助手运行时,它会覆盖来自 HTTP 标签助手的缓存输出。

使用如下语句解决了问题:

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

此行为的描述:

上面的代码检查内容是否被修改,如果 它有,它从输出缓冲区获取内容。

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

提前致谢!

【问题讨论】:

    标签: caching asp.net-core-mvc tag-helpers


    【解决方案1】:

    其他答案的解释对我来说不清楚,所以我测试了它,这是摘要:

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

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

    使用示例:

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

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

    【讨论】:

    • @jerrythomas 适用于.net core 2.2,我已经测试过了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    相关资源
    最近更新 更多