.NET核心要求的字段指示器
问题描述:
这是针对ASP.NET MVC Core 1.1 Web应用程序的。.NET核心要求的字段指示器
我想在我的模型,该模型有[必需]属性设置字段显示必填项指标(如标签后,一个红色的*)的一个很好的方式。
目前,我有我的标签使用LabelTagHelper的形式,像这样:
<label asp-for="Surname" class="required"></label>
我有一些CSS它基于“必需的”类的存在我的标签后加*号:
label.required:after {
color: #A94442;
content: ' *';
display:inline;
}
这工作。但是,当然,如果我改变我的模型,并添加或删除[Required]属性的字段,我必须确保手动转到标记并进行相应的更改,为相关标签添加或删除“required”类。
谁能帮我用一种优雅的方式来“必需”类添加到基于模型[必需]属性的存在的标签,而不是将其硬编码到CSHTML?
也许自定义标签助手从LabelTagHelper继承?并使用反射来查看[Required]属性是否在模型字段中?
还是有更好的办法?
答
您可以创建一个专用TagHelper达到这一目的:
[HtmlTargetElement("label", Attributes = ForAttributeName)]
public class RequiredTagHelper : TagHelper
{
private const string ForAttributeName = "asp-for";
[HtmlAttributeName(ForAttributeName)]
public ModelExpression For { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
if (context == null)
throw new ArgumentNullException(nameof(context));
if (output == null)
throw new ArgumentNullException(nameof(output));
if (For.Metadata.IsRequired)
{
var existingClass = output.Attributes.FirstOrDefault(f => f.Name == "class");
var cssClass = string.Empty;
if (existingClass != null)
{
cssClass = existingClass.Value.ToString();
}
cssClass += " required";
output.Attributes.Remove(existingClass);
output.Attributes.Add("class", cssClass);
}
}
}