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()
。
我有一个简单的 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()
。