TagHelpers根据验证属性为LabelTagHelper添加自定义类[必需]

时间:2016-12-10 03:06:40

标签: css asp.net-mvc asp.net-core-mvc tag-helpers

在Core MVC中,有一个新的概念作为Tag助手。

我们以前可以创建自定义html助手,根据验证数据注释附加一些类,如[必需]。

由于TagHelpers是一个非常新的领域,我无法找到足够的资源来实现以下目标:

这是视图模型:

    [Required]
    public Gender Gender { get; set; }

视图:

<label class="control-label col-md-3 required" asp-for="Gender"></label>

的CSS:

.required:after {
content: "*";
font-weight: bold;
color: red;
}

输出: enter image description here

但我不想在标签中手动添加所需的css类。不知怎的,我可以扩展LabelTagHelper来读取模型数据注释,如果它有[Required],那么在label元素中添加必需的类。

谢谢,

2 个答案:

答案 0 :(得分:3)

是的,您可以通过继承Array([11] => 100, [11] => 100, [11] => 100)类并首先将自己的类添加到属性列表中来轻松扩展它。

LabelTagHelper

答案 1 :(得分:0)

由于 Value 和 Reference 类型的处理方式不同,以下代码可能会有所帮助:

public override async Task ProcessAsync(TagHelperContext context,TagHelperOutput output)
{
    await base.ProcessAsync(context, output);

    if (RequiredAttributeExists(For.Metadata))
    {
        output.AddClass("required", HtmlEncoder.Default);
    }
}

private static bool RequiredAttributeExists(ModelMetadata metaData)
{
    if (metaData.ModelType.IsValueType)
    {
        return metaData.ValidatorMetadata.Any(x => x is RequiredAttribute);
    }
    else // not value type
    {
        return metaData.IsRequired;
    }
}