Mif*_*Fox 3 tag-helpers asp.net-core razor-pages
我想创建一个标签助手来在<input>标签之前和之后放置一些 HTML,但我想保留默认asp-for行为并访问ModelExpression数据。
为此,我尝试重写该Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper类型,如这篇文章中所述。然而,即使我可以在调试器中验证该Process方法正在被调用PreContent并且PostContent都已被设置,但除了标准标记之外,HTML 中没有显示任何内容<input>。不过,当从头开始为另一个标签创建标签助手时,它工作得很好。
我创建了一个小项目来演示这个问题。我将整个项目放在 GitHub 上,并复制了我在下面尝试创建的特定标签助手。
[HtmlTargetElement("input", Attributes = "asp-for,test-label")]
public class TestTagHelper : InputTagHelper
{
public TestTagHelper(IHtmlGenerator generator) : base(generator)
{
}
[HtmlAttributeName("test-label")]
public string Label { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.PreContent.SetHtmlContent($"<b>{WebUtility.HtmlEncode(Label)}</b> ");
output.PostContent.SetHtmlContent($" <i>({WebUtility.HtmlEncode(For.Name)})</i>"); // access information from the input tag
base.Process(context, output);
}
}
Run Code Online (Sandbox Code Playgroud)
我错过了一些明显的东西吗?这样做有什么警告吗?或者这是根本无法完成的事情?
对于这个问题,我们可以尝试调用PreElementandPostElement而不是PreContentand PostContentlike
[HtmlTargetElement("input", Attributes = "asp-for,test-label")]
public class TestTagHelper : InputTagHelper
{
public TestTagHelper(IHtmlGenerator generator) : base(generator)
{
}
[HtmlAttributeName("test-label")]
public string Label { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
base.Process(context, output);
output.PreElement.SetHtmlContent($"<b>{WebUtility.HtmlEncode(Label)}</b>");
output.PostElement.SetHtmlContent($"<i>({WebUtility.HtmlEncode(For.Name)})</i>");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1457 次 |
| 最近记录: |