gpt4 book ai didi

asp.net-core - .NET Core 必填字段指示器

转载 作者:行者123 更新时间:2023-12-02 03:06:18 25 4
gpt4 key购买 nike

这适用于 ASP.NET MVC Core 1.1 Web 应用程序。

我想要一种很好的方式来显示模型中设置了 [Required] 属性的字段的必填字段指示符(例如标签后的红色 *)。

目前,我使用 LabelTagHelper 在表单上添加标签,如下所示:

<label asp-for="Surname" class="required"></label>

我有一些 CSS,它根据“required”类的存在在我的标签后面添加 * 符号:

label.required:after {
color: #A94442;
content: ' *';
display:inline;
}

这有效。但是,当然,如果我更改模型并添加或删除字段的 [Required] 属性,我必须确保手动转到标记并进行相应的更改,添加或删除相关标签的“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);
}
}
}

关于asp.net-core - .NET Core 必填字段指示器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42179893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com