akd*_*akd 5 css asp.net-mvc asp.net-core-mvc tag-helpers
在 Core MVC 中,有一个新的概念作为标签助手。
我们之前可以创建自定义 html 帮助程序,以根据验证数据注释(例如 [Required])附加一些类。
作为 TagHelpers arq 相当新的领域,我找不到足够的资源来实现以下目标:
这是视图模型:
[Required]
public Gender Gender { get; set; }
Run Code Online (Sandbox Code Playgroud)
看法:
<label class="control-label col-md-3 required" asp-for="Gender"></label>
Run Code Online (Sandbox Code Playgroud)
css:
.required:after {
content: "*";
font-weight: bold;
color: red;
}
Run Code Online (Sandbox Code Playgroud)
但我不想在标签中手动添加所需的 css 类。不知何故,我应该能够扩展 LabelTagHelper 以读取模型数据注释,如果它具有 [Required] 则在标签元素中添加所需的类。
谢谢,
是的,您可以通过从LabelTagHelper
类继承并首先将您自己的类添加到属性列表来轻松扩展它。
[HtmlTargetElement("label", Attributes = "asp-for")]
public class RequiredLabelTagHelper : LabelTagHelper
{
public RequiredLabelTagHelper(IHtmlGenerator generator) : base(generator)
{
}
public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
if (For.Metadata.IsRequired)
{
CreateOrMergeAttribute("class", "required", output);
}
return base.ProcessAsync(context, output);
}
private void CreateOrMergeAttribute(string name, object content, TagHelperOutput output)
{
var currentAttribute = output.Attributes.FirstOrDefault(attribute => attribute.Name == name);
if (currentAttribute == null)
{
var attribute = new TagHelperAttribute(name, content);
output.Attributes.Add(attribute);
}
else
{
var newAttribute = new TagHelperAttribute(
name,
$"{currentAttribute.Value.ToString()} {content.ToString()}",
currentAttribute.ValueStyle);
output.Attributes.Remove(currentAttribute);
output.Attributes.Add(newAttribute);
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1655 次 |
最近记录: |