Я не уверен, почему это не сработало для меня, но я решил использовать ваш код и сделать что-то немного другое.
При загрузке JavaScript я добавляю следующее: это заставляет флажок запускать ненавязчивую проверку, если либо вы установите флажок, либо снимите его.Также, если вы отправите форму.
$(function () {
$(".checkboxonblurenabled").change(function () {
$('form').validate().element(this);
});
});
Вам также необходимо добавить класс CSS к вашему флажку, например, так.
@Html.CheckBoxFor(model => model.AgreeToPrivacyPolicy, new { @class = "checkboxonblurenabled"})
Итак, теперь нам нужно подключить модель и добавить класс для обработкипроверка на стороне сервера (которую я использую сверху), но незначительное изменение ненавязчивости.
Вот атрибут customer, который расширяет IClientValidate, как в примере выше ...
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
public class MustBeTrueAttribute : ValidationAttribute, IClientValidatable
{
public override bool IsValid(object value)
{
return value != null && value is bool && (bool)value;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
yield return new ModelClientValidationRule
{
ErrorMessage = this.ErrorMessage,
ValidationType = "mustbetrue"
};
}
}
В вашей модели свойство объекта задает нужные нотации атрибутов
[MustBeTrue(ErrorMessage = "Confirm you have read and agree to our privacy policy")]
[Display(Name = "Privacy policy")]
public bool AgreeToPrivacyPolicy { get; set; }
Хорошо, мы готовы добавить JavaScript.
(function ($) {
/*
START CHECK MUST BE TRUE - UNOBTRUSIVE JAVASCRIPT
START CHECK MUST BE TRUE - UNOBTRUSIVE JAVASCRIPT
START CHECK MUST BE TRUE - UNOBTRUSIVE JAVASCRIPT
*/
jQuery.validator.unobtrusive.adapters.add("mustbetrue", ['maxint'], function (options) {
options.rules["mustbetrue"] = options.params;
options.messages["mustbetrue"] = options.message;
});
jQuery.validator.addMethod("mustbetrue", function (value, element, params) {
if ($(element).is(':checked')) {
return true;
}
else {
return false;
}
});
/*
START CHECK MAX INT - UNOBTRUSIVE JAVASCRIPT
START CHECK MAX INT - UNOBTRUSIVE JAVASCRIPT
START CHECK MAX INT - UNOBTRUSIVE JAVASCRIPT
*/
} (jQuery));
Что делает эту работу, так это ... Что ж.Посмотрев на HTML-разметку после попытки предложить предложенный ответ выше, все мои значения были установлены в true, однако мой флажок отмечен как false.Итак, я решил позволить jQuery работать с IsChecked