This is an example of a simple MVC application using Enterprise Library validation
First add the EL validation to your project using nuget:
Now the Enterprise Library Validation has to be added to the ModelValidatorProviders
Create a EnterpriseLibraryValidatorWrapper class
using System.Collections.Generic; using System.Web.Mvc; using Microsoft.Practices.EnterpriseLibrary.Validation; public class EnterpriseLibraryValidatorWrapper : ModelValidator { private Validator _validator; public EnterpriseLibraryValidatorWrapper(ModelMetadata metadata, ControllerContext context, Validator validator) : base(metadata, context) { _validator = validator; } public override IEnumerable<ModelValidationResult> Validate(object container) { return ConvertResults(_validator.Validate(Metadata.Model)); } private IEnumerable<ModelValidationResult> ConvertResults(IEnumerable<ValidationResult> validationResults) { if (validationResults != null) { foreach (ValidationResult validationResult in validationResults) { if (validationResult.NestedValidationResults != null) { foreach (ModelValidationResult result in ConvertResults(validationResult.NestedValidationResults)) { yield return result; } } yield return new ModelValidationResult { Message = validationResult.Message, MemberName = validationResult.Key }; } } } }
And now create a EnterpriseLibraryValidatorProvider
using System.Collections.Generic; using System.Web.Mvc; using Microsoft.Practices.EnterpriseLibrary.Validation; public class EnterpriseLibraryValidatorProvider : ModelValidatorProvider { public override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context) { Validator validator = ValidationFactory.CreateValidator(metadata.ModelType); if (validator != null) { yield return new EnterpriseLibraryValidatorWrapper(metadata, context, validator); } } }
Now add it to the Application_Start() method in the global.asax
ModelValidatorProviders.Providers.Add(new EnterpriseLibraryValidatorProvider());
The Enterprise Library validation can be used now. Here’s a example:
using System; using Microsoft.Practices.EnterpriseLibrary.Validation.Validators; namespace MvcEL6Validation.Models { public class HomeDataModelEnterpriseLibrary { [RangeValidator(10, RangeBoundaryType.Inclusive, 110, RangeBoundaryType.Inclusive)] public int ValInt1 { get; set; } public int? ValInt2 { get; set; } [ContainsCharactersValidator("hello", ContainsCharacters.All)] [ContainsCharactersValidator("world", ContainsCharacters.All)] public string ValString1 { get; set; } [StringLengthValidator(5, 20)] public string ValString2 { get; set; } [NotNullValidator] public double ValDouble1 { get; set; } public double? ValDouble2 { get; set; } [RelativeDateTimeValidator(-120, DateTimeUnit.Year, -18, DateTimeUnit.Year, MessageTemplate = "Must be 18 years or older.")] public DateTime ValDateTime1 { get; set; } [RelativeDateTimeValidator(-120, DateTimeUnit.Year, -18, DateTimeUnit.Year, MessageTemplate = "Must be 18 years or older.")] public DateTime? ValDateTime2 { get; set; } } }
Client side Validation should be disabled as no client validation is provided.
HtmlHelper.ClientValidationEnabled = false; HtmlHelper.UnobtrusiveJavaScriptEnabled = false;
I am using EntLib 5 && MVC3. Your code compile but isn’t working. Is mandatory Entñlib v6.0?
Thanks
Hi Gabriel
Could be EL5 to EL6 have some big changes, but I don’t know the changes in the Validation module or the dependencies.
greetings Damien