Skip to content

Instantly share code, notes, and snippets.

@AlexBar
Created April 15, 2012 11:38
Show Gist options
  • Save AlexBar/2392169 to your computer and use it in GitHub Desktop.
Save AlexBar/2392169 to your computer and use it in GitHub Desktop.
Custom model validator for MvcExtensios
public class BoolRequired : CustomModelValidator
{
private readonly Func<string> _getErrorMsg;
public BoolRequired(ModelMetadata metadata, ControllerContext controllerContext, Func<string> getErrorMsg)
: base(metadata, controllerContext)
{
_getErrorMsg = getErrorMsg;
}
public override IEnumerable<ModelValidationResult> Validate(object value, object model)
{
if (!IsValid(value))
{
yield return new ModelValidationResult
{
Message = _getErrorMsg()
};
}
}
private bool IsValid(object value)
{
return value != null && (bool)value;
}
public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
{
yield return new ModelClientValidationRule { ValidationType = "brequired", ErrorMessage = _getErrorMsg() };
}
}
public static class BoolRequiredModelMetadataItemBuilderExtensions
{
public static ModelMetadataItemBuilder<bool> BoolRequired(this ModelMetadataItemBuilder<bool> self, string errorMessage)
{
return BoolRequired(self, () => errorMessage);
}
public static ModelMetadataItemBuilder<bool> BoolRequired(this ModelMetadataItemBuilder<bool> self, Func<string> errorMessage)
{
self.ValidateBy((m, c) => new BoolRequired(m, c, errorMessage));
return self;
}
}
(function ($) {
$.validator.unobtrusive.adapters.addBool("brequired", "required");
})(jQuery)
public abstract class CustomModelValidator : ModelValidator
{
protected CustomModelValidator(ModelMetadata metadata, ControllerContext controllerContext) : base(metadata, controllerContext)
{
}
public sealed override IEnumerable<ModelValidationResult> Validate(object container)
{
return Validate(Metadata.Model, container);
}
public abstract IEnumerable<ModelValidationResult> Validate(object value, object model);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment