从另一个 TagHelper 调用 TagHelpers?

Calling TagHelpers from another TagHelper?

有没有办法让一个 TagHelper 渲染另一个 TagHelper?

TagHelper 示例;

public class OuterTagHelper : TagHelper
{
    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        output.TagName = "";
        output.Content.SetContent("Hello <inner></inner>");
    }
}

public class InnerTagHelper : TagHelper
{
    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        output.TagName = "";
        output.Content.SetContent("World!");
    }
}

示例视图;

<outer></outer>

预期结果;

Hello World!

我知道我可能应该改用 ViewComponent,但是否有可能实现上述预期行为?

@Daniel J.G.是对的,这个不推荐。从技术上讲,如果您 运行 通过高度定制的剃刀解析器返回您的内容,然后像执行页面一样执行该内容,您就可以做到这一点——但这几乎可以肯定是解决问题的错误方法。

如果您需要使用一些现有的标签助手类型功能,那么您可以从 IHtmlGenerator 访问它。这无助于访问自定义标签助手功能,但如果您只需要现有内容(如标签、输入)的功能,那么这将起作用

[HtmlTargetElement("input", Attributes = nameof(Wrap) + ", asp-for")]
[HtmlTargetElement("select", Attributes = nameof(Wrap) + ", asp-for")]
public class FormGroupWrapperTagHelper : TagHelper
{
    public FormGroupWrapperTagHelper(IHtmlGenerator generator)
    {
        Generator = generator;
    }

    [HtmlAttributeNotBound]
    [ViewContext]
    public ViewContext ViewContext { get; set; }

    protected IHtmlGenerator Generator { get; }

    public ModelExpression AspFor { get; set; }
    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        var generateValidationMessage = Generator.GenerateValidationMessage(ViewContext,
                                                                  AspFor.Name,
                                                                  message: null,
                                                                  tag: null,
                                                                  htmlAttributes: null);
.....
}