Вручную установите ненавязчивую ошибку проверки в текстовом поле
Я делаю что-то подобное удаленной проверке, за исключением того, что я уже делаю свои вызовы вручную через jquery и настраиваю все, что мне нужно было установить.
Теперь моя проблема: если я хочу сказать валидатору, что конкретное текстовое поле недействительно (и препятствует отправке страницы, выделяет текстовое поле и т.д.). Как мне сделать это из кода?
@Html.LabelFor(m => Model.Slug)
@Html.TextBoxFor(m => Model.Slug)
<span id="UrlMsg" class="field-validation-error" style="display: none;"></span>
if (error) {
$('#UrlMsg').html('This name is already in use.').fadeIn('fast');
//what should I do here for the rest of the validation?
}
Ответы
Ответ 1
Во-первых, вы можете добавить сводку проверки:
@Html.ValidationMessageFor(m => m.Slug)
Затем вы можете вручную активировать проверку/ненавязчивую проверку jQuery с помощью метода .showError. Вот пример:
var errorArray = {};
errorArray["Slug"] = 'Some error message for the Slug text box';
$('#SomeFormId').validate().showErrors(errorArray);
Ответ 2
Вы также можете сделать:
@Html.ValidationMessageFor(m => m.Slug)
С помощью этой функции в вашем коде:
function setError(id, message) {
var span = $("span[data-valmsg-for=\"" + id + "\"]");
if (span && span.length > 0) {
$(span).html(message);
if (message && message != "") {
$(span).removeClass("field-validation-valid");
$(span).addClass("field-validation-no-valid");
} else {
$(span).removeClass("field-validation-no-valid");
$(span).addClass("field-validation-valid");
}
}
}
Затем можно установить ошибку
setError("Slug", "errorMsg");
Ответ 3
Использование showErrors не позволило этой ошибке сохраниться, поэтому при запуске .valid() ошибка была устранена. Вместо этого я добавил правило "forcibleerror" и метод javascript для установки сообщения.
function forceError(element, errorMessage) {
$(element).rules("add", {
forcibleerror: true,
messages: {
forcibleerror: function () { return errorMessage; }
}
});
var isForced = false;
if (errorMessage) {
isForced = true;
}
$(element)[0].dataset.isForced = isForced;
$(element).valid();
}
$.validator.addMethod("forcibleerror", function (value, element) {
return $(element)[0].dataset.isForced !== "true";
});
Использование:
forceError($('#Slug'), 'my custom message');
Чтобы вернуть его в правильное состояние:
forceError($('#Slug'), '');
Ответ 4
Это улучшение ответа FRL:
@Html.ValidationMessageFor(m => m.Slug)
Функция JS
const span = $('span[data-valmsg-for="' + name + '"]');
function setError(name, message) {
const span = $('span[data-valmsg-for="${name}"]');
if (span && span.length > 0) {
$(span).html(message);
if (message) {
$('input[name="${name}"]').addClass("input-validation-error");
$(span).removeClass("field-validation-valid");
$(span).addClass("field-validation-error");
} else {
$('input[name="${name}"]').removeClass("input-validation-error");
$(span).removeClass("field-validation-error");
$(span).addClass("field-validation-valid");
}
}
}
Назови это
setError("Slug", "errorMsg");