asp.net – 用于验证的数据注释,至少一个必填字段?
发布时间:2020-12-16 00:43:52 所属栏目:asp.Net 来源:网络整理
导读:如果我有一个包含字段列表的搜索对象,可以使用System.ComponentModel.DataAnnotations命名空间进行设置,以验证搜索中至少有一个字段不为空或为空吗?即所有的字段都是可选的,但至少应该输入一个字段。 解决方法 我会为此创建自定义验证器 – 它不会给客户
如果我有一个包含字段列表的搜索对象,可以使用System.ComponentModel.DataAnnotations命名空间进行设置,以验证搜索中至少有一个字段不为空或为空吗?即所有的字段都是可选的,但至少应该输入一个字段。
解决方法
我会为此创建自定义验证器 – 它不会给客户端验证,只是服务器端。
请注意,为了使其工作,您需要使用可空类型,因为值类型将默认为0或false: 首先创建一个新的验证器: using System.ComponentModel.DataAnnotations; using System.Reflection; // This is a class-level attribute,doesn't make sense at the property level [AttributeUsage(AttributeTargets.Class)] public class AtLeastOnePropertyAttribute : ValidationAttribute { // Have to override IsValid public override bool IsValid(object value) { // Need to use reflection to get properties of "value"... var typeInfo = value.GetType(); var propertyInfo = typeInfo.GetProperties(); foreach (var property in propertyInfo) { if (null != property.GetValue(value,null)) { // We've found a property with a value return true; } } // All properties were null. return false; } } 然后,您可以使用以下方式装饰您的模型: [AtLeastOneProperty(ErrorMessage="You must supply at least one value")] public class SimpleTest { public string StringProp { get; set; } public int? Id { get; set; } public bool? BoolProp { get; set; } } 然后当您调用ModelState.IsValid时,您的验证器将被调用,您的消息将被添加到您的视图上的ValidationSummary。 请注意,您可以扩展它以检查返回的属性类型,或者查找属性,以便包含/排除验证,如果你想 – 这是假设一个通用的验证器,不知道任何关于它验证的类型。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – Razor View语法无法识别HTML属性中的“@”
- asp.net-mvc-3 – 为什么Html.Label()不适用于句点?
- asp.net-mvc-4 – SimpleMembershipProvider:webpages_Mem
- Asp.net核心IIS 8.5:找不到视图“索引”
- asp.net – 如何从水晶报表中的组字段中删除组名
- asp.net – 用于存储表单字段和字段值的数据库架构建议
- asp.net-mvc-4 – 如何在Kendo UI数据源中禁用“读取”请求
- asp.net-mvc – ASP.NET MVC:仅由其他操作调用的Action
- asp.net – 如何在Web应用程序中使用ServiceStack Redis来利
- Asp.net验证网络文件地址是否有效的方法