diff --git a/Web/Edubase.Data/Edubase.Data.csproj b/Web/Edubase.Data/Edubase.Data.csproj index 11a87de3a..77824efc9 100644 --- a/Web/Edubase.Data/Edubase.Data.csproj +++ b/Web/Edubase.Data/Edubase.Data.csproj @@ -73,7 +73,7 @@ ..\packages\EntityFramework.6.5.1\lib\net45\EntityFramework.SqlServer.dll - ..\packages\FluentValidation.11.9.2\lib\netstandard2.0\FluentValidation.dll + ..\packages\FluentValidation.11.10.0\lib\netstandard2.0\FluentValidation.dll ..\packages\Microsoft.AspNet.Identity.Core.2.2.4\lib\net45\Microsoft.AspNet.Identity.Core.dll diff --git a/Web/Edubase.Data/packages.config b/Web/Edubase.Data/packages.config index 57cb74909..3f00cd009 100644 --- a/Web/Edubase.Data/packages.config +++ b/Web/Edubase.Data/packages.config @@ -1,7 +1,7 @@  - + diff --git a/Web/Edubase.Web.UI/Areas/Establishments/Controllers/EstablishmentController.cs b/Web/Edubase.Web.UI/Areas/Establishments/Controllers/EstablishmentController.cs index e31218c5f..c7e7f388e 100644 --- a/Web/Edubase.Web.UI/Areas/Establishments/Controllers/EstablishmentController.cs +++ b/Web/Edubase.Web.UI/Areas/Establishments/Controllers/EstablishmentController.cs @@ -33,7 +33,6 @@ using Edubase.Web.UI.Helpers; using Edubase.Web.UI.Models; using Edubase.Web.UI.Validation; -using FluentValidation.Mvc; using MoreLinq; using ET = Edubase.Services.Enums.eLookupEstablishmentType; using CreateSteps = Edubase.Web.UI.Areas.Establishments.Models.CreateEstablishmentViewModel.eEstabCreateSteps; @@ -382,7 +381,7 @@ await Task.WhenAll( viewModel.SchoolCapacityToolTipLink = viewModel.Establishment.TypeId.Equals((int)ET.AcademySecure16to19) ? string.Empty : _resourcesHelper.GetResourceStringForEstablishment("SchoolCapacityLink", (eLookupEstablishmentTypeGroup?) viewModel.Establishment.EstablishmentTypeGroupId, User); - + return View(viewModel); } diff --git a/Web/Edubase.Web.UI/Areas/Establishments/Models/BulkUpdateViewModel.cs b/Web/Edubase.Web.UI/Areas/Establishments/Models/BulkUpdateViewModel.cs index 80c7a54bf..41d95cdc6 100644 --- a/Web/Edubase.Web.UI/Areas/Establishments/Models/BulkUpdateViewModel.cs +++ b/Web/Edubase.Web.UI/Areas/Establishments/Models/BulkUpdateViewModel.cs @@ -1,13 +1,11 @@ using Edubase.Web.UI.Areas.Establishments.Models.Validators; using Edubase.Web.UI.Models; -using FluentValidation.Attributes; using System.Web; using static Edubase.Services.Establishments.Models.BulkUpdateDto; using Edubase.Services.Domain; namespace Edubase.Web.UI.Areas.Establishments.Models { - [Validator(typeof(BulkUpdateViewModelValidator))] public class BulkUpdateViewModel { public DateTimeViewModel EffectiveDate { get; set; } = new DateTimeViewModel(); @@ -27,4 +25,4 @@ public BulkUpdateViewModel(bool canOverrideCRProcess) CanOverrideCRProcess = canOverrideCRProcess; } } -} \ No newline at end of file +} diff --git a/Web/Edubase.Web.UI/Areas/Governors/Models/GovernorsBulkUpdateViewModel.cs b/Web/Edubase.Web.UI/Areas/Governors/Models/GovernorsBulkUpdateViewModel.cs index 86e1f3dd4..f62e1d6fc 100644 --- a/Web/Edubase.Web.UI/Areas/Governors/Models/GovernorsBulkUpdateViewModel.cs +++ b/Web/Edubase.Web.UI/Areas/Governors/Models/GovernorsBulkUpdateViewModel.cs @@ -1,11 +1,9 @@ using Edubase.Services.Domain; using Edubase.Web.UI.Areas.Governors.Models.Validators; -using FluentValidation.Attributes; using System.Web; namespace Edubase.Web.UI.Areas.Governors.Models { - [Validator(typeof(GovernorsBulkUpdateViewModelValidator))] public class GovernorsBulkUpdateViewModel { public HttpPostedFileBase BulkFile { get; set; } diff --git a/Web/Edubase.Web.UI/Areas/Groups/Controllers/GroupController.cs b/Web/Edubase.Web.UI/Areas/Groups/Controllers/GroupController.cs index 453e95875..dce5279fb 100644 --- a/Web/Edubase.Web.UI/Areas/Groups/Controllers/GroupController.cs +++ b/Web/Edubase.Web.UI/Areas/Groups/Controllers/GroupController.cs @@ -11,7 +11,7 @@ using Edubase.Services.Security; using Edubase.Web.UI.Areas.Groups.Models; using Edubase.Web.UI.Helpers; -using FluentValidation.Mvc; +using Edubase.Web.UI.Validation; namespace Edubase.Web.UI.Areas.Groups.Controllers { diff --git a/Web/Edubase.Web.UI/Controllers/EduBaseController.cs b/Web/Edubase.Web.UI/Controllers/EduBaseController.cs index 70523755e..cb5b10507 100644 --- a/Web/Edubase.Web.UI/Controllers/EduBaseController.cs +++ b/Web/Edubase.Web.UI/Controllers/EduBaseController.cs @@ -1,7 +1,6 @@ using Autofac; using Edubase.Services.Domain; using Edubase.Web.UI.Helpers; -using FluentValidation.Mvc; using MoreLinq; using System.Linq; using System.Web.Mvc; diff --git a/Web/Edubase.Web.UI/Edubase.Web.UI.csproj b/Web/Edubase.Web.UI/Edubase.Web.UI.csproj index 23dcf727d..2aa4b273d 100644 --- a/Web/Edubase.Web.UI/Edubase.Web.UI.csproj +++ b/Web/Edubase.Web.UI/Edubase.Web.UI.csproj @@ -84,14 +84,8 @@ ..\packages\EntityFramework.6.5.1\lib\net45\EntityFramework.SqlServer.dll - - ..\packages\FluentValidation.8.6.2\lib\net45\FluentValidation.dll - - - ..\packages\FluentValidation.Mvc5.8.6.1\lib\net45\FluentValidation.Mvc.dll - - - ..\packages\FluentValidation.ValidatorAttribute.8.6.1\lib\net45\FluentValidation.ValidatorAttribute.dll + + ..\packages\FluentValidation.11.10.0\lib\netstandard2.0\FluentValidation.dll ..\packages\Glimpse.AspNet.1.9.2\lib\net45\Glimpse.AspNet.dll diff --git a/Web/Edubase.Web.UI/Global.asax.cs b/Web/Edubase.Web.UI/Global.asax.cs index 112f57651..247386e38 100644 --- a/Web/Edubase.Web.UI/Global.asax.cs +++ b/Web/Edubase.Web.UI/Global.asax.cs @@ -2,7 +2,6 @@ using Edubase.Common.Cache; using Edubase.Web.UI.Filters; using Edubase.Web.UI.Validation; -using FluentValidation.Mvc; using System; using System.Configuration; using System.IO; @@ -60,11 +59,6 @@ protected void Application_Start() IocConfig.AutofacDependencyResolver.ApplicationContainer.Resolve().InitialiseIfNecessaryAsync().Wait(); - var fluentValidationModelValidatorProvider = new FluentValidationModelValidatorProvider(new AutofacValidatorFactory(IocConfig.AutofacDependencyResolver)); - DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false; - fluentValidationModelValidatorProvider.AddImplicitRequiredValidator = false; - ModelValidatorProviders.Providers.Add(fluentValidationModelValidatorProvider); - var logger = IocConfig.AutofacDependencyResolver.ApplicationContainer.Resolve(); logger.ScheduleLogFlush(); logger.ScheduleLogPurge(); diff --git a/Web/Edubase.Web.UI/Validation/AutofacValidationModule.cs b/Web/Edubase.Web.UI/Validation/AutofacValidationModule.cs index bda5d7907..985b3ea78 100644 --- a/Web/Edubase.Web.UI/Validation/AutofacValidationModule.cs +++ b/Web/Edubase.Web.UI/Validation/AutofacValidationModule.cs @@ -1,16 +1,4 @@ using Autofac; -using Edubase.Web.UI.Areas.Establishments.Models; -using Edubase.Web.UI.Areas.Establishments.Models.Validators; -using Edubase.Web.UI.Areas.Governors.Models; -using Edubase.Web.UI.Areas.Governors.Models.Validators; -using Edubase.Web.UI.Areas.Groups.Models.CreateEdit; -using Edubase.Web.UI.Areas.Groups.Models.Validators; -using Edubase.Web.UI.Models; -using Edubase.Web.UI.Models.DataQuality; -using Edubase.Web.UI.Models.DataQuality.Validators; -using Edubase.Web.UI.Models.Notifications; -using Edubase.Web.UI.Models.Notifications.Validators; -using Edubase.Web.UI.Models.Validators; using FluentValidation; namespace Edubase.Web.UI.Validation @@ -19,73 +7,10 @@ public class ValidationModule : Module { protected override void Load(ContainerBuilder builder) { - builder.RegisterType() - .Keyed(typeof(IValidator)) - .As().InstancePerDependency(); - - builder.RegisterType() - .Keyed(typeof(IValidator)) - .As(); - - builder.RegisterType() - .Keyed(typeof(IValidator)) - .As(); - - builder.RegisterType() - .Keyed(typeof(IValidator)) - .As(); - - builder.RegisterType() - .Keyed(typeof(IValidator)) - .As(); - - builder.RegisterType() - .Keyed(typeof(IValidator)) - .As(); - - builder.RegisterType() - .Keyed(typeof(IValidator)) - .As(); - - builder.RegisterType() - .Keyed(typeof(IValidator)) - .As(); - - builder.RegisterType() - .Keyed(typeof(IValidator)) - .As(); - - builder.RegisterType() - .Keyed(typeof(IValidator)) - .As(); - - builder.RegisterType() - .Keyed(typeof(IValidator)) - .As(); - - builder.RegisterType() - .Keyed(typeof(IValidator)) - .As(); - - builder.RegisterType() - .Keyed(typeof(IValidator)) - .As(); - - builder.RegisterType() - .Keyed(typeof(IValidator)) - .As(); - - builder.RegisterType() - .Keyed(typeof(IValidator)) - .As(); - - builder.RegisterType() - .Keyed(typeof(IValidator)) - .As(); - - builder.RegisterType() - .Keyed(typeof(IValidator)) - .As(); + builder.RegisterAssemblyTypes(ThisAssembly) + .Where(t => t.IsClosedTypeOf(typeof(IValidator<>))) + .AsImplementedInterfaces() + .InstancePerDependency(); } } } diff --git a/Web/Edubase.Web.UI/Validation/EdubaseAbstractValidator.cs b/Web/Edubase.Web.UI/Validation/EdubaseAbstractValidator.cs index c1ec93c14..1331a3424 100644 --- a/Web/Edubase.Web.UI/Validation/EdubaseAbstractValidator.cs +++ b/Web/Edubase.Web.UI/Validation/EdubaseAbstractValidator.cs @@ -1,5 +1,4 @@ -using FluentValidation.Mvc; -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Web; @@ -10,15 +9,19 @@ namespace Edubase.Web.UI.Validation { - public abstract class EdubaseAbstractValidator : AbstractValidator, IValidatorInterceptor + public abstract class EdubaseAbstractValidator : AbstractValidator { - public ValidationResult AfterMvcValidation(ControllerContext controllerContext, ValidationContext validationContext, ValidationResult result) + public ValidationResult AfterMvcValidation(ControllerContext controllerContext, ValidationContext validationContext, ValidationResult result) { result.EduBaseAddToModelState(controllerContext.Controller.ViewData.ModelState, null); //controllerContext.Controller.ViewBag.FVErrors = result; return result; } - public ValidationContext BeforeMvcValidation(ControllerContext controllerContext, ValidationContext validationContext) => validationContext; + public ValidationContext BeforeMvcValidation(ControllerContext controllerContext, + ValidationContext validationContext) + { + return validationContext; + } } -} \ No newline at end of file +} diff --git a/Web/Edubase.Web.UI/Validation/ValidationExtensions.cs b/Web/Edubase.Web.UI/Validation/ValidationExtensions.cs index f2bb8704f..6df405cdb 100644 --- a/Web/Edubase.Web.UI/Validation/ValidationExtensions.cs +++ b/Web/Edubase.Web.UI/Validation/ValidationExtensions.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Web.Mvc; using Edubase.Services.Domain; +using FluentValidation.Results; namespace Edubase.Web.UI.Validation { @@ -96,5 +97,14 @@ public static void ApplyToModelState(this ApiResponse apiResponse, ControllerCon } } } + + public static void AddToModelState(this ValidationResult result, ModelStateDictionary modelState, string prefix) + { + foreach (var error in result.Errors) + { + var key = string.IsNullOrEmpty(prefix) ? error.PropertyName : $"{prefix}.{error.PropertyName}"; + modelState.AddModelError(key, error.ErrorMessage); + } + } } } diff --git a/Web/Edubase.Web.UI/packages.config b/Web/Edubase.Web.UI/packages.config index 7b1f3c5ea..7a0b6d40d 100644 --- a/Web/Edubase.Web.UI/packages.config +++ b/Web/Edubase.Web.UI/packages.config @@ -10,9 +10,7 @@ - - - +