Pau*_*aul 5 required asp.net-core asp.net-core-tag-helpers
这是针对ASP.NET MVC Core 1.1 Web应用程序的。
我想要一种很好的方式来显示模型中具有[Required]属性设置的字段的必填字段指示符(如标签后的红色*)。
目前,我使用LabelTagHelper将标签贴在表单上,如下所示:
<label asp-for="Surname" class="required"></label>
Run Code Online (Sandbox Code Playgroud)
我有一些CSS,它根据“ required”类的存在在标签后添加*符号:
label.required:after {
color: #A94442;
content: ' *';
display:inline;
}
Run Code Online (Sandbox Code Playgroud)
这可行。但是,当然,如果我更改模型并为字段添加或删除[Required]属性,则必须确保手动转到标记并进行相应的更改,为有问题的标签添加或删除“必需”类。
任何人都可以通过一种优雅的方式帮助我,根据模型中[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} ";
}
cssClass += "required";
output.Attributes.SetAttribute("class", cssClass);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
996 次 |
| 最近记录: |