Пользовательская проверка не работает с Ajax MVC Call - PullRequest
0 голосов
/ 18 января 2012

При нажатии кнопки я хочу назначить форму, если другая форма, на той же странице (не в поле ввода), действительна. Эта проверка является пользовательской проверкой, которую я создал и работает нормально. Это код в представлении

$("#btnSave").click(function (e) {

            if ($("#GeneralButtonFrm").valid()) {

                $("#ButtonFrm").submit();

            } else {
                //Error Message
            } });

Проблема заключается в том, что действие отправки выполняется без ожидания ответа пользовательской проверки, который возвращает false.

Есть идеи, почему это происходит?

Примечание: я сказал, что не использую ligthbox для рендеринга частичного, потому что в этом случае решение будет jQuery.validator.unobtrusive.parse ('# form');

Спасибо

1 Ответ

0 голосов
/ 20 января 2012

Вы все еще очень расплывчаты в своем вопросе. Но я думаю, что вы хотите позвонить в ajax и выполнить проверку на стороне сервера. Если это так, проблема заключается в том, что ваша проверка вернется перед запросом ajax, поскольку запрос ajax является асинхронным. Сделайте это

<html>
    <head>
        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
        <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.9/jquery.validate.min.js"></script>
        <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.js"></script>
        <script type="text/javascript">
            jQuery.validator.addMethod("ajaxCustom", function (value, element) {
                var wrap = $(element);
                var url = wrap.data("customAjaxUrl");
                var result;

                $.ajax({
                    type: 'GET',
                    url: url,
                    dataType: 'json',
                    success: function (data) {
                       result  = data.valid;
                    },
                    data: { value: value, id: element.id },
                    async: false
                });

                return this.optional(element) || result;

            }, "Ajax");

            $.validator.unobtrusive.adapters.addBool('ajaxCustom');
            </script>
        <style type="text/css">
            .input-validation-error {
                background: red;
            }

        </style>

    </head>
    <body>

        <form action="/">
            <input data-val-ajaxCustom="Tuckel" data-val="true" data-val-required="Its required" data-custom-ajax-url="validate.html" />
            <button type="submit">Submit</button>
        </form>
    </body>
</html>
...