我正在使用引导 CSS 表单样式,当文本框收到验证错误消息时,我需要将类“错误”放在 containsg 上。我怎样才能做到这一点?
问题是,在提交表单之前,所有验证都会在 ajax 上触发,除了我的自定义验证器,它只在发布时触发。所以需要确保它在两种情况下都发生。
我正在使用引导 CSS 表单样式,当文本框收到验证错误消息时,我需要将类“错误”放在 containsg 上。我怎样才能做到这一点?
问题是,在提交表单之前,所有验证都会在 ajax 上触发,除了我的自定义验证器,它只在发布时触发。所以需要确保它在两种情况下都发生。
onError
在 jquery.validate.unobtrusive 中的函数内部,只需添加如下.addClass("error")
行:
function onError(error, inputElement) { // 'this' is the form element
var container = $(this).find("[data-valmsg-for='" + escapeAttributeValue(inputElement[0].name) + "']"),
replace = $.parseJSON(container.attr("data-valmsg-replace")) !== false;
container.removeClass("field-validation-valid").addClass("field-validation-error");
error.data("unobtrusiveContainer", container);
container.parents(".field-encapsulator:first").addClass("error");
if (replace) {
container.empty();
error.removeClass("input-validation-error").appendTo(container);
}
else {
error.hide();
}
}
ASP.NET MVC 将field-validation-error
类添加到错误消息元素,并input-validation-error
通过 javascript 在服务器端和客户端形成控件。没有包含元素,具体取决于您的代码,表单控件及其标签可能位于也可能不在同一包含元素下。而且,即使他们这样做了,MVC 也会将提到的类设置为表单控件和错误消息元素,而不是包含元素。
此外,当您使用Html.EditorForModel()
生成的标记自动生成表单时,如下所示:
<div class="editor-label"><label for="foo">Foo</label></div>
<div class="editor-field"><input name="foo"/></div>
没有包含元素可以映射到control-group
Twitter Bootstrap 上的类。您可以通过添加模板来更改此EditorTemplates/Object.cshtml
模板。
我建议您将 Twitter Bootstrap 调整为 ASP.NET MVC,而不是相反。
如使用 jQuery Unobtrusive Validation 时如何添加“submitHandler”函数的一些答案中所述?,可以通过 访问设置$("form").data("validator").settings
。
然后您可以设置您喜欢的任何有效/无效类:
var settings = $("form").data("validator").settings;
settings.errorClass += " is-invalid";
settings.validClass += " is-valid";