【ASP.NET Core】标记帮助器——替换元素名称

标记帮助器不仅可以给目标元素(标记)插入(或修改)属性,插入自定义的HTML内容,在某些需求中还可以替换原来标记的名称。

比如我们在使用 Blazor 时很熟悉的 Component 标记帮助器。在 Razor 文档中你将使用 元素来设置要呈现的组件。而在实际处理时,会去掉 元素,并呈现组件的HTML内容。

下面咱们举两个例子。

第一个比较简单,自定义的元素是 ,生成的元素是

[HtmlTargetElement("textBox", TagStructure = TagStructure.WithoutEndTag)]
public class TextInputTagHelper : TagHelper
{
    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        // 将标记名称改为 input
        output.TagName = "input";
        // 设置 type 属性
        output.Attributes.SetAttribute("type", "text");
    }
}

这个不难理解,首先我们用的是候,在 Razor 文档使用的是元素是 ,而最后呈现出来的 HTML 是 元素。咱们就把它弄得像个控件那样用,是不是有点以前 ASP.NET 的味儿了?以前是有个前缀 asp:TextBox。

TagStructure.WithoutEndTag 的意思是指定这个标记没有结束标签,就像

Razor 文档中要用 @addTagHelper 指令导入一下。

@addTagHelper *, TestApp

TestApp 是我这个程序集的名称,它导入此程序集下所有标记帮助器。

用起来也方便。

运行之后,生成这样的 HTML。

input type="text">

咱们确实可以让它更像传统 ASP.NET。

@addTagHelper *, TestApp
@tagHelperPrefix "asp:"

div>
    asp:textBox />
div>

@tagHelperPrefix 就是为标记添加一个前缀,这里指定的是“asp:”,所以用的时候就真的捡到“童年回忆”了。想当年,ASP.NET 就是这么用的。

 

下面再举一例,咱们做 RadioButton(单选按钮)。选项之间互斥,同一个分组中你只能选择一项。在 HTML 中是 ,它没有“分组”属性,而是通过 name 属性来分组。name 相同的就是同一组,互斥。

注意的是, 只显示个圈圈让你可以选中,可不包含选项文本。一般我们会给它配个

所以,咱们实现的帮助器要生成一个

,里面包含
        
posted @

2023-02-26 19:34 
东邪独孤 
阅读(0
评论(0
编辑 
收藏 
举报

文章来源于互联网:【ASP.NET Core】标记帮助器——替换元素名称

THE END
分享
二维码