我正在尝试在asp.net核心中实现一个Tag Helper
类,它返回其内容的原始输出。
这是我的尝试:
public class RawTagHelper : TagHelper
{
public RawTagHelper(IHtmlHelper _)
{
HtmlHelper = _;
}
private IHtmlHelper HtmlHelper { get; }
[ViewContext]
public ViewContext ViewContext { get; set; }
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
((IViewContextAware)HtmlHelper).Contextualize(ViewContext);
output.TagName = null;
output.Content.SetHtmlContent(HtmlHelper.Raw(await output.GetChildContentAsync()));
}
}
问题是HtmlHelper.Raw返回一个对象DefaultTagHelperContent
。
答案 0 :(得分:0)
实际上问题是我将await output.GetChildContentAsync()
传递给接受字符串的HtmlHelper.Raw,所以我不得不改变
output.Content.SetHtmlContent(HtmlHelper.Raw(await output.GetChildContentAsync()));
到
output.Content.SetHtmlContent(HtmlHelper.Raw((await output.GetChildContentAsync()).GetContent()));
然后我意识到SetHtmlContent
会再次将其编码为html元素,所以我最终得到了元素的内容,并使用SetContent
代替SetHtmlContent
。
所以HtmlHelper.Raw Tag Helper看起来应该是那样的
public class RawTagHelper : TagHelper
{
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
output.TagName = null;
output.Content.SetContent((await output.GetChildContentAsync()).GetContent());
}
}
使用..
<raw>Some text <div>Other text</div></raw>
输出..
Some text <div>Other text</div>