带有ViewBag内容的ASP.NET Core TagHelper - 它是空的

时间:2017-07-13 21:01:20

标签: c# asp.net-core asp.net-core-tag-helpers

我有一个简单的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。问题是即使它被初始化我得到以下内容:

  
    

[留言文字]

  

这里没有标记。我提出了一个断点,现在发生了什么 - 当它遇到Process方法时,内容仍然是空的。然后在管道的某个地方,它会从ViewBag中初始化内容,但为时已晚。

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

1 个答案:

答案 0 :(得分:1)

为了实现这一目标,我必须覆盖ProcessAsync而不是Process,并调用await output.GetChildContentAsync()代替output.Content.GetContent()