从另一个 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);
.....
}
有没有办法让一个 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);
.....
}