我想根据ASP.NET MVC中的条件执行验证。
我有相同的页面和模型用于插入和更新记录,现在我想根据条件设置必填字段。
在插入时,EmployeeCode是必需的,但在更新时我不想设置EmployeeCode是必需的。
如何在asp.net mvc中执行此案例验证?
答案 0 :(得分:0)
您可以通过在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
来测试您的模型是否有效。
答案 1 :(得分:0)
您可以使用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验证来实现此目的。让我知道您正在使用哪个库以及版本。
答案 2 :(得分:0)
使用CustomeValidationAttribute
。
首先,使用[CustomValidationAttribute]
装饰您的属性,指定验证方法。 E.g。
[CustomValidation(typeof(YourModel), nameof(ValidateEmployeeCode))]
public string EmployeeCode { get; set; }
ValidateEmployeeCode
必须通过public,static,return ValidationResult
,并接受一个对象作为第一个参数,或者被验证的属性的具体类型。它还可以接受ValidationContext
作为第二个参数,它具有有用的属性,例如要验证的实例和属性的显示名称。
然后,该方法根据条件进行检查,如果值为空,则返回ValidationResult.Success
或新ValidationResult
,并显示错误消息,该消息将显示给用户{ {1}}在视图中调用。您可以使用记录ID的值作为标志,以了解它是新记录还是更新记录。