Я бы создал валидатор как для сервера, так и для клиента. Используя MVC и ненавязчивую проверку форм, это можно сделать, просто выполнив следующее:
Во-первых, создайте класс в своем проекте для выполнения проверки на стороне сервера следующим образом:
public class EnforceTrueAttribute : ValidationAttribute, IClientValidatable
{
public override bool IsValid(object value)
{
if (value == null) return false;
if (value.GetType() != typeof(bool)) throw new InvalidOperationException("can only be used on boolean properties.");
return (bool)value == true;
}
public override string FormatErrorMessage(string name)
{
return "The " + name + " field must be checked in order to continue.";
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
yield return new ModelClientValidationRule
{
ErrorMessage = String.IsNullOrEmpty(ErrorMessage) ? FormatErrorMessage(metadata.DisplayName) : ErrorMessage,
ValidationType = "enforcetrue"
};
}
}
После этого аннотируйте соответствующее свойство в вашей модели:
[EnforceTrue(ErrorMessage=@"Error Message")]
public bool ThisMustBeTrue{ get; set; }
И, наконец, включите проверку на стороне клиента, добавив следующий скрипт в представление:
<script type="text/javascript">
jQuery.validator.addMethod("enforcetrue", function (value, element, param) {
return element.checked;
});
jQuery.validator.unobtrusive.adapters.addBool("enforcetrue");
</script>
Примечание. Мы уже создали метод GetClientValidationRules
, который помещает нашу аннотацию в представление из нашей модели.