我正在使用ASP.NET Core MVC项目,我们希望将自定义消息设置为带有字段名称的必填字段,而不是框架给出的通用消息。
为此,我创建了一个自定义类,如下所示:
public class GenericRequired : ValidationAttribute
{
public GenericRequired() : base(() => "{0} is required")
{
}
public override bool IsValid(object value)
{
if (value == null)
{
return false;
}
string str = value as string;
if (str != null)
{
return (str.Trim().Length != 0);
}
return true;
}
}
在模型中使用该类。
[GenericRequired]
[DisplayName("Title")]
public string Name { get; set; }
在浏览页面上:
<span asp-validation-for="Name" class="text-danger"></span>
但是没有显示或验证的消息不起作用。有没有其他方法可以使它工作?
答案 0 :(得分:3)
您的GenericRequired
实施仅适用于服务器端验证。创建ValidationAttribute
的子类时,您只能获得开箱即用的服务器端验证。为了使用客户端验证,您需要实现IClientModelValidator
并添加jQuery验证器(链接页面下方的说明)。
正如我在评论中所建议的那样,你可以只是将RequiredAttribute
子类化为你想要的东西,例如:
public class GenericRequired : RequiredAttribute
{
public GenericRequired()
{
ErrorMessage = "{0} is required";
}
}
所有这一切都会改变ErrorMessage
,同时保留服务器端和客户端验证,这对于您的用例来说简单得多。