我有一个简单的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中初始化内容,但为时已晚。
那么,我怎样才能让它发挥作用呢?
答案 0 :(得分:1)
为了实现这一目标,我必须覆盖ProcessAsync
而不是Process
,并调用await output.GetChildContentAsync()
代替output.Content.GetContent()
。