Hey folks! I’m working on a project using MVC3 and I’ve made a custom attribute to check if a checkbox is ticked. It works fine when I submit the form, but I want it to validate as soon as the user interacts with it. You know, before it even reaches the server.
Here’s what I’ve got so far:
public class MustCheck : ValidationAttribute, IClientValidatable
{
public MustCheck() : base("tick this box") { }
public override bool IsValid(object input)
{
return (bool)input == true;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var rule = new ModelClientValidationRule();
rule.ErrorMessage = FormatErrorMessage(metadata.GetDisplayName());
rule.ValidationType = "required";
yield return rule;
}
}
It’s doing its job when I check ModelState.IsValid in my action method, but I want it to kick in earlier. Any ideas on how to tweak this to make it work on the client side? Thanks a bunch!
Your approach is on the right track, but you need to adjust the ValidationType in your GetClientValidationRules method. Instead of ‘required’, use a custom type like ‘mustcheck’. Then, implement a corresponding jQuery validator method. Here’s a suggestion:
In your view or layout, add:
$.validator.addMethod('mustcheck', function(value, element) {
return $(element).is(':checked');
}, 'This checkbox must be ticked.');
$.validator.unobtrusive.adapters.addBool('mustcheck');
This should enable client-side validation for your custom attribute. Remember to include the necessary jQuery and validation scripts. Let me know if you encounter any issues implementing this solution.
hey there SwimmingFish! have u considered using jquery validation? it’s super handy for client-side stuff. maybe try adding a custom validator method to check the checkbox state? just a thought… what other approaches have u explored so far? curious to hear more about ur project!
yo swimminfish, sounds like a tricky one! have u looked into unobtrusive validation? it’s built into mvc3 and works great with custom attributes. might need to tweak ur GetClientValidationRules method a bit. give it a shot and let us kno how it goes!