ASP.NET MVC: рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рд╕рддреНрдпрд╛рдкрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рд╢рд░реНрдд рдЧреНрд░рд╛рд╣рдХ рд╕рддреНрдпрд╛рдкрди

рдореЗрд░рд╛ рдХрд╛рд░реНрдп рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдореЙрдбрд▓ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╕рд╢рд░реНрдд рд╕рддреНрдпрд╛рдкрди рдХрд░рдирд╛ рдерд╛ред Google рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд╛рд░реНрдп рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдпрд╣ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ред

рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╡рд┐рдХрд▓реНрдк рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓реНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ рдФрд░ рдмрд┐рдВрджреБ рдЯреЛрдкреА рдореЗрдВ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдореВрд▓реНрдп рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдирд╣реАрдВ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдк рдЙрд╕ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдк рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рджреВрд╕рд░реА рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЕрднреА рднреА рдореЙрдбрд▓ рд╕реЗ рдореЙрдбрд▓ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдХреБрдЫ рд╕рдордп рдХреЗ рдмрд╛рдж рдПрдХ рд╕реБрдВрджрд░ рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдореЗрдВ, рдореИрдВ рдлрд╝реНрд▓реБрдПрдВрд╡реЗрдВрдЯреЗрд▓реЗрд╢рди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдЖрдпрд╛ред рдЗрд╕рдХрд╛ рдЖрдХрд░реНрд╖рдг рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХреА рдорджрдж рд╕реЗ рдЖрдк рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рдиреА рд╕реЗ рдЪреЗрдХ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдкрд░реНрдпрд╛рдкреНрдд рдЕрд╡рд╕рд░ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреЛ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдкреНрд░рд▓реЗрдЦрди рд╣реИ ред рдпрд╣рд╛рдБ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

[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); } } 


рд╕рд╛рдзрд╛рд░рдг рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдЬреИрд╕реЗ рдХрд┐ рднрд░рд╛ рд╣реБрдЖ, рдиреНрдпреВрдирддрдо рд▓рдВрдмрд╛рдИ, рдЕрдзрд┐рдХрддрдо рд▓рдВрдмрд╛рдИ, рдЖрджрд┐ рдХреЗ рд▓рд┐рдПред рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдорд╛рдиреНрдпрддрд╛ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЬрд╛рдВрдЪ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рд╢рд░реНрдд) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдиреА рд╕рдВрдкрддреНрддрд┐ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ IClientValiditable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╛рдлреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ ред

рдореВрд▓ рд╡рд┐рдЪрд╛рд░ рдПрдХ рдРрд╕реА рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИ рдЬреЛ jQuery.validate рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдЯрд╛рд╕реЗрдЯ рд▓реМрдЯрд╛рддрд╛ рд╣реИ ред

рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЬрдм рдЖрдкрдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд╕рддреНрдпрд╛рдкрди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЧреНрд░рд╛рд╣рдХ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдк рдирд┐рдпрдореЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдирд┐рдХрд▓рд╛:

 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; }); 


рд▓реЗрдЦ рдереЛрдбрд╝рд╛ crumpled рдФрд░ рдмрд▓реНрдХрд┐ рд╕реВрдЦрд╛ рдирд┐рдХрд▓рд╛, рд▓реЗрдХрд┐рди рдПрдХ рд▓реЗрдЦ рдореЗрдВ рд╕рднреА рд╕реВрдХреНрд╖реНрдорддрд╛рдУрдВ рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдмреНрдпрд╛рдЬ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВред

рдЖрдк NuGet рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреИрдХреЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: FluentValidation.Mvc3 рдХреЗ рд╕рд╛рде FluentValidation рдирд┐рд░реНрднрд░рддрд╛

рдпреБрдкреАрдбреА:
рд╡реИрд╢реНтАНрд╡рд┐рдХ.рд╕реИрдХреНрд╕ рдореЗрдВ рдореЙрдбрд▓ рдХреЛ рдмрд╛рдВрдзрддреЗ рд╕рдордп рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

 protected void Application_Start(Object sender, EventArgs e) { FluentValidationModelValidatorProvider.Configure(); } 


рдФрд░ рдЬрд┐рд╕ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдлреНрд▓реБрдПрдВрд╡рд┐рд▓реЗрдЬреЗрд╢рди рдореЗрдВ рд╣реИред

 [FluentValidation.Attributes.Validator(typeof(MyModelValidator))] public class MyModel 

Source: https://habr.com/ru/post/In145370/


All Articles