C# 模型验证ASP.NET核心MVC上的自定义错误消息

C# 模型验证ASP.NET核心MVC上的自定义错误消息,c#,validation,asp.net-core,asp.net-core-mvc,C#,Validation,Asp.net Core,Asp.net Core Mvc,我正在使用ASP.NET核心MVC项目,在该项目中,我们希望将自定义消息设置为具有文件名的必填字段,而不是框架提供的通用消息。 为此,我创建了一个自定义类,如下所示: public class GenericRequired : ValidationAttribute { public GenericRequired() : base(() => "{0} is required") { } public override bool IsValid(ob

我正在使用ASP.NET核心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>


但消息未显示或验证不起作用。有没有其他办法让它发挥作用

您的
generirequired
实现仅适用于服务器端验证。创建
ValidationAttribute
的子类时,您将只获得开箱即用的服务器端验证。为了使用客户端验证,您需要实现并添加jQuery验证器(链接页面下方的说明)

正如我在评论中所建议的,您可以改为只使用子类
RequiredAttribute
来获得您想要的,例如:

公共类generirequired:RequiredAttribute
{
公共一般要求()
{
ErrorMessage=“{0}是必需的”;
}
}

所有这一切只需更改
ErrorMessage
,同时保留服务器端和客户端验证,这对于您的用例来说要简单得多。

仅使用
[必需(ErrorMessage=“{0}是必需的”)]
有什么问题吗?谢谢@我不想写的柯克拉金每次都是必修课,修改课文需要时间。是的,我想你可能会带着它回来。你的代码对我有用,所以一定是你遗漏了什么。但无论如何,我建议您创建
RequiredAttribute
的子类,不要重新创建
IsValid
功能。@KirkLarkin:您是否与Core进行了检查?有效吗?好的,我将尝试一下
RequiredAttribute
接下来的步骤:客户模型我将遵循客户模型进行客户端验证,但是它也适用于服务器端:(是的,当然。它同时实现服务器端和客户端验证,而您的
GenericRequired
仅实现服务器端验证。