ASP.net MVC Validation Hook
У меня есть следующий вид в ASP.net MVC 3:
@model Models.CreateProjectViewModel
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.validate.min.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"></script>
@using( Html.BeginForm() ) {
@Html.TextBoxFor(m => m.ProjectName)
@Html.ValidationMessageFor(m => m.ProjectName)
<p>
<input type="submit" value="Save" />
</p>
}
Я использую ненавязчивый javascript с jQuery и Fluent Validation.
Когда я нажимаю кнопку "Сохранить", и проверка не выполняется, есть ли какое-то событие, которое я могу подключить, чтобы вызвать какой-то пользовательский javascript?
function validationFailed() {
// do something here only if validation failed
}
Как мне привязать к валидации так, чтобы, когда она потерпела неудачу (и только если она не удалась), я мог бы вызвать мою функцию validationFailed().
Ответы
Ответ 1
Вы можете использовать invalidHandler
, я считаю, что это проверка jquery.
invalidHandler Обратный звонок
Обратный вызов для настраиваемого кода при подаче недопустимой формы. Называется с объектом события в качестве первого аргумента, а валидатор - как второй.
Ответ 2
Как указано в документах jQuery/Validation, вы можете использовать invalidHandler для реагирования при отправке недопустимой формы.
Но поскольку ненавязчивая проверка MVC создает экземпляр самой проверки, вы должны связать это событие позже.
Используя тот же механизм, что и jQuery/Validation, вы можете привязать свой код к пользовательскому событию элементов формы invalid-form.validate, ведьма соответствует invalidHandler!
$(document).ready(function() {
$('#myform').bind('invalid-form.validate',function(){
alert('invalid form!');
});
});
чтобы указать форму использования id:
@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "myform" })) {
}
Обновление:дел >
Альтернативный способ получить существующий объект проверки - это вызвать validate() в форме. Если уже был создан валидатор для этой формы , он будет возвращен:
Изменить: после инициализации изменение .settings.invalidHandler
слишком поздно для привязки. Таким образом, следующий фрагмент не будет работать [больше], если вы не перезапустите валидатор.
$(document).ready(function() {
var existingValdiation = $("#myform").validate();
//the settings property corresponds to the options parameter
existingValdiation.settings.invalidHandler = function (form) {
alert('invalid form!');
};
// not recommended:
// re-init would bind settings.invalidHandler to 'invalid-form.validate'
// existingValdiation.init();
});