数组必须包含1个元素
我有以下课程:
public class CreateJob { [Required] public int JobTypeId { get; set; } public string RequestedBy { get; set; } public JobTask[] TaskDescriptions { get; set; } }
我想在TaskDescriptions
上面有一个数据注释,以便数组必须包含至少一个元素? 很像[Required]
。 这可能吗?
我之前看过一个自定义validation属性,如下所示:
(我给了一个带有列表的样本,但可以适用于数组,或者你可以使用列表)
public class MustHaveOneElementAttribute : ValidationAttribute { public override bool IsValid(object value) { var list = value as IList; if (list != null) { return list.Count > 0; } return false; } } [MustHaveOneElementAttribute (ErrorMessage = "At least a task is required")] public List TaskDescriptions { get; private set; }
它可以使用标准的MinLengthAttributevalidation属性来完成,但仅适用于数组:
public class CreateJob { [Required] public int JobTypeId { get; set; } public string RequestedBy { get; set; } [MinLength(1)] public JobTask[] TaskDescriptions { get; set; } }
这是@dove解决方案的一个改进版本,它处理不同类型的集合,如HashSet,List等…
public class MustHaveOneElementAttribute : ValidationAttribute { public override bool IsValid(object value) { var collection = value as IEnumerable; if (collection != null && collection.GetEnumerator().MoveNext()) { return true; } return false; } }
请允许我在使用MinLengthAttribute和.NET Core时附注。
Microsoft建议使用从.NET Core 2.0开始的Razor页面。
目前,使用MinLengthAttribute对PageModel中的属性进行validation不起作用:
[BindProperty] [Required] [MinLength(1)] public IEnumerable SelectedStores { get; set; }
SelectedStores.Count()== 0时,ModelState.IsValid返回true。
使用.NET Core 2.1 Preview 2进行测试。
如果值为null,则MinLength属性将该值视为有效。 因此,只需将模型中的属性初始化为空数组即可。
上述就是C#学习教程:数组必须包含1个元素分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
MinLength(1, ErrorMessageResourceName = nameof(ValidationErrors.AtLeastOneSelected), ErrorMessageResourceType = typeof(ValidationErrors))] int[] SelectedLanguages { get; set; } = new int[0];
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/936391.html