Cal*_*ass 27 .net c# asp.net-mvc model-validation asp.net-mvc-3
我有以下课程:
public class CreateJob
{
[Required]
public int JobTypeId { get; set; }
public string RequestedBy { get; set; }
public JobTask[] TaskDescriptions { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想在上面有一个数据注释,TaskDescriptions以便数组必须包含至少一个元素?非常喜欢[Required].这可能吗?
Sat*_*Sat 47
它可以使用标准的MinLengthAttribute验证属性来完成,但仅适用于数组:
public class CreateJob
{
[Required]
public int JobTypeId { get; set; }
public string RequestedBy { get; set; }
[MinLength(1)]
public JobTask[] TaskDescriptions { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
dov*_*ove 24
我之前看过一个自定义验证属性,如下所示:
(我给了一个带有列表的样本,但可以适用于数组,或者你可以使用列表)
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<Person> TaskDescriptions { get; private set; }
Run Code Online (Sandbox Code Playgroud)
这是@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;
}
}
Run Code Online (Sandbox Code Playgroud)
请允许我在 .NET Core 中使用 MinLengthAttribute 的旁注。
Microsoft 建议从 .NET Core 2.0 开始使用 Razor Pages。
目前,使用 MinLengthAttribute 对 PageModel 中的属性进行验证不起作用:
[BindProperty]
[Required]
[MinLength(1)]
public IEnumerable<int> SelectedStores { get; set; }
Run Code Online (Sandbox Code Playgroud)
当 SelectedStores.Count() == 0 时,ModelState.IsValid 返回 true。
使用 .NET Core 2.1 Preview 2 进行测试。
| 归档时间: |
|
| 查看次数: |
13129 次 |
| 最近记录: |