[Validator(typeof(MyModelValidator))] public class MyModel { public string Name { get; set; } public string Description { get; set; } public bool IsDescriptionRequired { get; set; } } public class MyModelValidator: AbstractValidator<MyModel> { public MyModelValidator() { RuleFor(m => m.Name).NotEmpty(); RuleFor(m => m.Description).NotEmpty().When(m => m.IsDescriptionRequired); } }
using GetClientValidationRulesFunc = Func<ModelMetadata, ControllerContext, IEnumerable<ModelClientValidationRule>>; class ClientValidator : PropertyValidator, IClientValidatable { private readonly GetClientValidationRulesFunc _getClientValidationRulesFunc; public ClientValidator(GetClientValidationRulesFunc getClientValidationRulesFunc) : base((string)null) { _getClientValidationRulesFunc = getClientValidationRulesFunc; } protected override bool IsValid(PropertyValidatorContext context) { // Suppress any server side validation return true; } public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) { return _getClientValidationRulesFunc(metadata, context); } }
public class MyModelValidator: AbstractValidator<MyModel> { public MyModelValidator() { RuleFor(m => m.Name).NotEmpty(); RuleFor(m => m.Description).NotEmpty().When(m => m.IsDescriptionRequired).SetValidator(new ClientValidator(GetValidationRules)); } public IEnumerable<ModelClientValidationRule> GetValidationRules(ModelMetadata metadata, ControllerContext context) { yield return new ModelClientValidationRule { ErrorMessage = "Description required", ValidationType = "validateDescription" }; } }
$.validator.unobtrusive.adapters.addBool("validateDescription"); $.validator.addMethod("validateDescription", function (value, element, param) { if ( $("#IsDescriptionRequired").val() === "true" ) { return $.trim($("#Description").val()).length > 0; } return true; });
protected void Application_Start(Object sender, EventArgs e) { FluentValidationModelValidatorProvider.Configure(); }
[FluentValidation.Attributes.Validator(typeof(MyModelValidator))] public class MyModel
Source: https://habr.com/ru/post/145370/
All Articles