[英]Set Required Field Validation based on condition in ASP.NET MVC
我想根据ASP.NET MVC中的条件执行验证。
我具有用于插入和更新记录的相同页面和模型,现在我想根据条件设置必填字段。
在插入时,EmployeeCode是必需的,但是在更新时,我不想设置EmployeeCode是必需的。
我如何在asp.net MVC中执行这种情况下的验证?
您可以通过在ViewModel上实现IValidatableObject
来添加自定义验证逻辑。
public class MyViewModelThatMixesTwoUsecases : IValidatableObject {
public string EmployeeCode { get; set; }
public bool IsCreateUsecase { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) {
if (IsCreateUsecase && string.IsNullOrWhiteSpace(EmployeeCode)) {
yield return new ValidationResult(
"EmployeeCode is required for create usecase",
new[] {"EmployeeCode"}
);
}
}
}
在控制器中,通过调用ModelState.IsValid
测试模型是否有效。
您可以对它使用Fluent验证。
RuleFor(x => x.EmployeeCode)
.Must((o,e) =>
{
if (o.Id > 0)
{
return true;
}
return !string.IsNullOrEmpty(o.EmployeeCode);
})
.WithMessage("Employee code is required");
您也可以使用Dataannotation验证来实现。 让我知道您正在使用哪个库以及版本。
使用CustomeValidationAttribute
。
首先,使用[CustomValidationAttribute]
装饰您的属性,并指定一种验证方法。 例如
[CustomValidation(typeof(YourModel), nameof(ValidateEmployeeCode))]
public string EmployeeCode { get; set; }
ValidateEmployeeCode
必须通过公共的,静态的,返回ValidationResult
并接受一个对象作为第一个参数或要验证的属性的具体类型。 它还可以接受ValidationContext
作为第二个参数,该参数具有有用的属性,例如正在验证的实例和该属性的显示名称。
然后,该方法根据条件检查值是否为空,并返回ValidationResult.Success
或带有错误消息的新ValidationResult
,并在视图中通过Html.ValidationMessageFor()
调用将其显示给用户。 您可以使用记录ID的值作为标志来了解它是新记录还是更新记录。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.