public class RemapFormValuesOnValidationFailurePolicy : IConfigurationAction { public void Configure(BehaviorGraph graph) { graph .Actions() .Where(b => b.InputType() != null) .Each(chain => chain.WrapWith(typeof(RemapFailedValidationFormValuesBehaviour<>).MakeGenericType(chain.OutputType().BaseType))); } }
public class RemapFailedValidationFormValuesBehaviour<TInputModel> : BasicBehavior where TInputModel : class { private readonly IFubuRequest request; public RemapFailedValidationFormValuesBehaviour(IFubuRequest request) : base(PartialBehavior.Executes) { this.request = request; } protected override void afterInsideBehavior() { FailedValidationInputModel<TInputModel> failedValidationContext = null; try { failedValidationContext = request.Get<FailedValidationInputModel<TInputModel>>(); } catch (FubuException) { return; } if (failedValidationContext.IsForFailedValidation) { var viewModel = request.Get<TInputModel>(); MapProperties(failedValidationContext.InputModel, viewModel); request.Set<TInputModel>(viewModel); } } private void MapProperties(object from, object to) { foreach (var pi in from.GetType().GetProperties()) { var prop = to.GetType().GetProperties().SingleOrDefault(ti => ti.Name == pi.Name); if (prop != null) { prop.SetValue(to, pi.GetValue(from, new object[] { }), new object[] { }); } } } }
if (failedValidationContext.IsForFailedValidation) { var viewModel = request.Get(GetViewModelType()); MapProperties(failedValidationContext.InputModel, viewModel); request.Set(viewModel); }
public class RemapFormValuesOnValidationFailurePolicy : IConfigurationAction { public void Configure(BehaviorGraph graph) { graph .Actions() .Where(b => b.InputType() != null
) .Each(chain => chain.AddAfter(new Wrapper(typeof(RemapFailedValidationFormValuesBehaviour<>).MakeGenericType(chain.OutputType().BaseType)))); } }