Как настроить ненавязчивую проверку в ASP.NET MVC 3 в соответствии с моим стилем?

Проверка по умолчанию в MVC 3 основана на jQuery Validation, которую я обычно могу настроить с помощью следующего:

$.validator.setDefaults({
  submitHandler: function() { alert('submitHandler'); },
  errorPlacement: function(error, element) {
    // do something important here
    alert('errorPlacement');
  },
  errorClass: "error",
  errorElement: "input",
  onkeyup: false,
  onclick: false
})

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

Как я могу настроить валидацию для соответствия любой структуре/стилю, который мне нужен для моего стиля сайта? По умолчанию это замечательно, но он не всегда работает в любой ситуации.

Ответ 1

В моем коде вместо использования $.validator.setDefaults я обращаюсь к валидатору формы с помощью $("#form_selector").data('validator'), а затем изменяю настройки.

$(function () {

    var validator = $("#form_selector").data('validator');
    validator.settings.errorPlacement = function(error,element) {
        alert('errorPlacement');
    };

});

Посмотрите, работает ли это для вас.

Ответ 2

У меня была одна и та же проблема, но я понял, что ненавязчивый плагин фактически вызвал проблему, он переопределит любые параметры, которые вы установили! Хитрость заключается в том, чтобы ваш код был написан/включен в следующем порядке:

  • Подтверждающий плагин
  • Пользовательский код и параметры
  • Ненавязчивый плагин

Любой другой порядок, и это будет неправильно настроено!

Ответ 3

Правильный способ сделать это:

Script порядок:

  • Подтверждающий плагин
  • Ненавязчивый плагин
  • Пользовательский код и параметры

Пользовательский код и параметры script:

var settings = {
   //...
}; 

// override jQuery unobtrusive validator settings
$.validator.unobtrusive.options = settings;

Ответ 4

Все, что я сделал для этого, просто дублировал мой стиль для соответствия элементам, которые добавляет Unobtrusive validator.

@Html.ValidationMessageFor(x => x.EmailAddress, "", new { @class = "field-error" })

При возникновении ошибки проверки "ValidationMessageFor" добавляет класс "ошибка проверки поля", как показано ниже.

<span class="field-error field-validation-error" data-valmsg-for="EmailAddress" data-valmsg-replace="true"><span for="EmailAddress" generated="true" class="">Email address is Required.</span></span>

Итак, я дублировал свой стиль, например

.field-error.***field-validation-error*** {position:relative;color:#fff;background:#589BC9;}

Я думал, что это простой способ исправить это.