ASP.net MVC Крюк проверки - PullRequest
       12

ASP.net MVC Крюк проверки

17 голосов
/ 04 октября 2011

У меня есть следующее представление в 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 ().

Ответы [ 2 ]

36 голосов
/ 08 октября 2011

Как сказано в документации по jQuery / Validation, вы можете использовать invalidHandler , чтобы реагировать при отправке неверной формы.

Но поскольку ненавязчивая проверка MVC создает саму Валидацию, вам нужно перехватить это событие позже.

Используя точно такой же механизм, что и jQuery / Validation: вы можете связать свой код с пользовательским событием элементов формы ' invalid-form.validate ', ведь оно соответствует invalidHandler!

$(document).ready(function() {
    $('#myform').bind('invalid-form.validate',function(){
        alert('invalid form!');
    });
});

для указания формы используйте:

@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();
});
4 голосов
/ 04 октября 2011

Вы можете использовать invalidHandler, я полагаю, что это проверка JQuery.

invalidHandler Callback
Обратный вызов для пользовательского кода при отправке неверной формы. Называется с объектом события в качестве первого аргумента и валидатором в качестве второй.

...