根据ASP.NET MVC中的条件设置必填字段验证

时间:2017-08-23 07:33:59

标签: asp.net asp.net-mvc validation asp.net-mvc-4 data-annotations

我想根据ASP.NET MVC中的条件执行验证。

我有相同的页面和模型用于插入和更新记录,现在我想根据条件设置必填字段。

在插入时,EmployeeCode是必需的,但在更新时我不想设置EmployeeCode是必需的。

如何在asp.net mvc中执行此案例验证?

3 个答案:

答案 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的值作为标志,以了解它是新记录还是更新记录。