繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM