Почему эта нестандартная клиентская ненавязчивая проверка MVC не работает? - PullRequest
0 голосов
/ 25 ноября 2018

Я пытаюсь собрать простую форму, используя ASP.NET MVC, и у меня возникают проблемы при попытке сделать так, чтобы пользовательская клиентская сторона выполняла ненавязчивую проверку для работы.За последние два дня я прочитал десятки учебных пособий, блогов и других страниц, касающихся проверки клиентов ASP.NET.Информация там запутанная, неполная и противоречивая.Лучшее, что я мог найти, это какой-то маркетинговый ум, как это круто, а потом немного кода, без объяснения используемых функций.

Я опубликую здесь свой HTML-код, потому что я почти на 100% уверен, что проблемана стороне клиента.Вот упрощенный HTML-код, созданный моим представлением для вашего удобства.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>test</title>
</head>
<body>
    <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.2.0.min.js"></script>
    <script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.16.0/jquery.validate.min.js"></script>
    <script src="https://ajax.aspnetcdn.com/ajax/jquery.validation.unobtrusive/3.2.6/jquery.validate.unobtrusive.min.js"></script>

    <script>

        function myValidationFunction(value) {
            return false;
        }


        jQuery.validator.addMethod("mycustomvalidation", function (value, element, params) {
            return myValidationFunction(value);
        });

        jQuery.validator.unobtrusive.adapters.add("mycustomvalidation", ["other", "comp", "value"],
            function (options) {
                options.rules['requiredif'] = {
                    other: options.params.other,
                    comp: options.params.comp,
                    value: options.params.value
                };
                options.messages['mycustomvalidation'] = options.message;
            }
        );


    </script>

    <form action="/test.htm" method="post">

        <label for="Field1">Field1</label>
        <input data-val="true" data-val-required="Field1 is required." id="Field1" name="Field1" type="text" value="" />
        <span class="field-validation-valid error-text" data-valmsg-for="Field1" data-valmsg-replace="true"></span>

        <label for="Field2">Field2</label>
        <input data-val="true" data-val-myvalidation="Field2 is not valid" data-val-myvalidation-validationcallback="myValidationFunction" id="Field2" name="Field2" type="text" value="" />
        <span class="field-validation-valid error-text" data-valmsg-for="Field2" data-valmsg-replace="true"></span>

        <input type="submit" value="TEST" />

    </form>
</body>
</html>

Для пояснения в Field1 используется встроенная проверка «Требуется».Я включил его только для проверки того, что jquery.validate.min.js и jquery.validate.unobtrusive.min.js действительно работают.

Я пока опишу свои рассуждения.В каком-то блоге я обнаружил, что все, что вам нужно сделать, это создать метатег data-val-myvalidation-validationcallback = "myValidationFunction", который соединит проверку с функцией myValidationFunction.Осталось только реализовать эту функцию в скрипте.Конечно, это не работает.

В другом учебнике было сказано что-то о разборе формы после загрузки документа, разборе метатегов и установлении соединения aproproate.Ну, это тоже не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...