在MVC中,当我们将模型发布到操作上时,我们将执行以下操作以针对该模型的数据注释验证模型:
if (ModelState.IsValid)
如果我们将属性标记为[Required],则ModelState.IsValid将验证该属性是否包含值。
我的问题:如何手动构建和运行自定义验证器?
PS我只在谈论后端验证器。
在.NET Core中,您可以简单地创建从继承的类ValidationAttribute
。您可以在ASP.NET Core MVC文档中查看完整的详细信息。
这是直接从文档中获取的示例:
public class ClassicMovieAttribute : ValidationAttribute
{
private int _year;
public ClassicMovieAttribute(int Year)
{
_year = Year;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
Movie movie = (Movie)validationContext.ObjectInstance;
if (movie.Genre == Genre.Classic && movie.ReleaseDate.Year > _year)
{
return new ValidationResult(GetErrorMessage());
}
return ValidationResult.Success;
}
}
我已根据您的问题要求对示例进行了修改,以排除客户端验证。
为了使用这个新属性(同样,取自文档),您需要将其添加到相关字段中:
[ClassicMovie(1960)]
[DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; }
这是另一个确保值是的简单示例true
:
public class EnforceTrueAttribute : ValidationAttribute
{
public EnforceTrueAttribute()
: base("The {0} field must be true.") { }
public override bool IsValid(object value) =>
value is bool valueAsBool && valueAsBool;
}
这以相同的方式应用:
[EnforceTrue]
public bool ThisShouldBeTrue { get; set; }
编辑:要求的前端代码:
<div asp-validation-summary="All" class="text-danger"></div>
选项为全部,仅模型或无。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句