我正在开发一个基于 EntityFrameworkCore 并针对 ASP.NET Core 2.1 的网站。我想为模型中的枚举字段指定错误消息,如下所示:
\n\n[Required(ErrorMessage = "Select an item from the list.")]\npublic MyEnum MyEnum { get; set; }\nRun Code Online (Sandbox Code Playgroud)\n\n但是,仍然生成库存消息:The value \'0\' is invalid。问题似乎是在评估我的任何代码之前验证枚举类型。这里介绍的两种方法(https://www.codeproject.com/Articles/1204077/ASP-NET-Core-MVC-Model-Validation),要么创建一个继承自 ValidationAttribute 的类,要么让模型继承自 IValidatableObject受此之苦。
我找到了一个解决方法:将字段声明为 int,然后使用自定义验证属性:
\n\n[EnumCheck(typeof(MyEnum), ErrorMessage = "Select an item form the list.")]\npublic int MyEnum { get; set; }\nRun Code Online (Sandbox Code Playgroud)\n\n...然后从 ValidationAttribute 继承子类:
\n\nsealed public class EnumCheck : ValidationAttribute\n{\n readonly Type t_;\n\n public EnumCheck(Type t)\n {\n t_ = t;\n }\n\n public override bool IsValid(object …Run Code Online (Sandbox Code Playgroud) c# enums validationattribute ivalidatableobject asp.net-core-2.1