Я хочу, чтобы мой флажок "Согласиться на условия" был обязательным с использованием проверки jQuery в проекте MVC3. В настоящее время я получаю проверку подлинности сервера/клиента DRY/SPOT из "атрибутов аннотации данных MS" + "MS MVC3 ненавязчивая проверка jQuery".
Здесь отдельный тест (простой HTML, созданный MVC3). Почему это не работает, пожалуйста? При запуске проверка правильности заполнения поля "Контактное имя" заполняется, но не имеет значения для состояния флажка.
<!DOCTYPE html>
<html>
<head>
<title>RequiredCheckbox</title>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script type="text/javascript" src="//ajax.microsoft.com/ajax/jQuery.Validate/1.7/jQuery.Validate.js"></script>
<script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.js"></script>
<script type="text/javascript" language="javascript">
$(function () {
// http://itmeze.com/2010/12/checkbox-has-to-be-checked-with-unobtrusive-jquery-validation-and-asp-net-mvc-3/
$.validator.unobtrusive.adapters.add("mandatory", function (options) {
options.rules["required"] = true;
if (options.message) {
options.messages["required"] = options.message;
}
}
});
$.validator.unobtrusive.parse(document);
});
</script>
</head>
<body>
<div>
<form>
<input data-val="true" data-val-mandatory="The field Terms Are Accepted is invalid." id="isTermsAccepted" name="isTermsAccepted" type="checkbox" value="true" />
<input name="isTermsAccepted" type="hidden" value="false" />
<span class="field-validation-valid" data-valmsg-for="isTermsAccepted" data-valmsg-replace="true"></span>
<input data-val="true" data-val-required="The Contact Name field is required." id="contactName" name="contactName" type="text" value="" />
<span class="field-validation-valid" data-valmsg-for="contactName" data-valmsg-replace="true"></span>
<button type="submit">Submit</button>
</form>
</div>
</body>
</html>
Остальная часть этого сообщения - только мои заметки по исследованиям.
Значение атрибута аннотации данных [требуется] не помогает:
http://forums.89.biz/forums/MVC+3+Unobtrusive+validation+does+not+work+with+checkboxes+(jquery+validation)+and+the+fix+for+it.
Это хорошо. То, что "требуется" означает для флажка - это, очевидно, священная война, в которую я не хочу входить, где MS думала, что они знают лучше, чем команда jquery. Принуждение к локальному использованию должно быть простым: $("form").validate({ rules: { cbAgreeToTerms: "required" } });
... не так ли? нет, из-за:
http://blog.waynebrantley.com/2011/01/mvc3-breaks-any-manual-use-of-jquery.html
http://pinoytech.org/question/4824071/microsofts-jquery-validate-unobtrusive-makes-other-validators-skip-validation
Что? Это довольно вонючий cheezy! (ИМХО, конечно.)
Теперь я пробовал это решение:
http://itmeze.com/2010/12/checkbox-has-to-be-checked-with-unobtrusive-jquery-validation-and-asp-net-mvc-3/
и это не сработало для меня. Этот автор, болтающий в комментариях и несколько грубо используемом перевернутом тесте CHECKBOX от ранее в своей статье, заставляет меня задаться вопросом, действительно ли это работает для него/нее, а затем какое другое вуду было вовлечено?
Примечание. Я думаю, что последний фрагмент JS эквивалентен чистке:
$.validator.unobtrusive.adapters.addBool("brequired", "required");
Это было предложено на последнем посте в:
http://forums.asp.net/p/1648319/4281140.aspx#4281140
Но заметьте, что автор комментирует, что он еще не отладил его. Это не сработало для меня и, читая между строк, я думаю, что он означает, что он не сработал для него?
Unobtrusive.js вызывает синтаксический анализ на docready, поэтому я попробовал позвонить, но это мне не помогло.
$.validator.unobtrusive.parse(document);
Я также нашел несколько подобных статей, и никто не говорит о необходимости инициализации. Может быть, все они локально редактируют оригинальные/общедоступные unobtrusive.js? Я бы предпочел, чтобы я мог помочь, не для чего нужны адаптеры?
Я нашел статьи, почти то же самое, а также более сложные примеры:
ASP.NET MVC 3 ненавязчивая пользовательская проверка валидации
Выполнить проверку на стороне клиента для настраиваемого атрибута
http://xhalent.wordpress.com/2011/01/27/custom-unobstrusive-jquery-validation-in-asp-net-mvc-3/
Но я ничего не вижу там, что отличается от того, что я уже пробовал.
Действительно ли это работает для людей? Почему я не могу заставить его работать для меня?