我正在做一些类似于远程验证的事情,除了我已经通过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?
}
答案 0 :(得分:49)
首先,您可以添加验证摘要:
@Html.ValidationMessageFor(m => m.Slug)
然后,您可以使用.showError方法手动触发jQuery验证/不显眼验证。这是一个示例:
var errorArray = {};
errorArray["Slug"] = 'Some error message for the Slug text box';
$('#SomeFormId').validate().showErrors(errorArray);
答案 1 :(得分:3)
你也可以这样做:
@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");
答案 2 :(得分:2)
使用showErrors不允许错误继续存在,因此运行.valid()可以清除错误。相反,我添加了一个“强制错误”规则和一个设置消息的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'), '');
答案 3 :(得分:1)
这是对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");
答案 4 :(得分:0)
我认为,已接受的答案有两个大问题,使它无用:
kevinpo's answer解决了这两个问题,如果需要动态生成的错误消息,可能应该使用
{{3}}。但是静态错误消息通常就足够了,所以...
将此添加到您站点范围内的javascript文件中:
.addField('Nitro', member.premiumSince ? 'Yes' : 'No', true)
将此添加到HTML中的相关输入元素。第一个属性$.fn.extend({
toggleOk: function (value) {
this[0].dataset.ok = value;
this.valid();
}
});
$.validator.addMethod("ok", function (value, element) {
return this.optional(element) || $(element)[0].dataset.ok === "true";
});
$.validator.unobtrusive.adapters.addBool("ok");
告诉非侵入式验证来为此输入激活这种类型的验证,并告诉它无效时显示什么错误消息。第二个属性data-val-ok
将初始状态设置为有效。
data-ok
在页面的Javascript中调用此代码,以将输入设置为无效,显示错误和相关格式,并阻止页面提交。
data-val-ok="That item does not exist." data-ok="true"
调用此命令将其更改回有效状态,隐藏错误和相关格式,并允许页面提交:
$('#myInput').toggleOk(false);