ASP.NET 包含来自 ViewBag 的内容的核心 TagHelper - 它是空的

ASP.NET Core TagHelper with content from ViewBag - it's empty

我有一个简单的 ToastTagHelper:

[HtmlTargetElement("toast")]
public class ToastTagHelper : TagHelper
{
    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        string message = output.Content.GetContent();
        if (string.IsNullOrWhiteSpace(message))
        {
            output.TagName = "";    // this should not output anything!
            return;
        }

        output.TagName = "div";
        output.Attributes.Add("id", "toast");
        output.Content.SetContent(message.Trim());
    }
}

现在,这是我在 _Layout 中使用它的方式:

<toast>@ViewBag.Message</toast>

并且在需要时在我的控制器中初始化 ViewBag.Message。问题是即使它已初始化我得到以下信息:

[message text]

这里没有标签。我放置了一个断点,这就是发生的事情 - 当它遇到 Process 方法时,内容仍然是空的。然后在管道下方的某个地方初始化 ViewBag 的内容,但为时已晚。

那么,我怎样才能让它发挥作用?

为此,我必须覆盖 ProcessAsync 而不是 Process 并调用 await output.GetChildContentAsync() 代替 output.Content.GetContent()