【发布时间】:2015-07-24 17:26:46
【问题描述】:
我正在使用带有验证和不显眼的验证插件的 jQuery 作为 ASP.NET MVC 5 堆栈的一部分。
我的表单由所谓的“表单组”(一组字段)组成,并且我有一个复选框,用于控制应该启用/禁用哪个表单组。
我有两个表单组,两个组都有自己的必填字段。
当我修改复选框选中状态时,我必须启用/禁用组 - 并为每个组动态添加/删除所需的验证规则。
不幸的是,验证消息和错误类没有从表单中删除。
我试图通过重新验证表单/重置表单来手动删除它 - 直到现在都没有运气。
function enablePersonGroup() {
app.enableFormGroup('.person-group');
$('input[name=catalogValueId]').rules('add', {
required: true,
messages: {
required: requiredErrorMessage
}
});
}
function disablePersonGroup() {
app.disableFormGroup('.person-group');
// I CAN REMOVE THE RULES, BUT THE ERROR MESSAGE REMAINS:
//$('input[name=catalogValueId]').rules('remove', 'required');
delete $('form').validate().settings.rules['catalogValueId'];
}
$(selector).change(function () {
var type = $(selector+ ':checked').val();
switch (type) {
case 'Anonym':
enableAnonymGroup();
disablePersonGroup();
break;
case 'Person':
disableAnonymGroup();
enablePersonGroup();
break;
}
$("form").validate().resetForm(); // DOESN'T HELP, ERROR MESSAGE REMAINS
});
【问题讨论】:
-
有几个选项取决于 UI,但这里真正的问题是它没有解决服务器端验证。而是在您的属性上使用具有相似属性的foolproof
[RequiredIf],这样您就无需任何额外代码即可获得服务器和客户端验证。 -
“真正的问题是它没有解决服务器端验证问题” - 不,服务器端验证工作得很好,我正在使用 FluentValidation。不幸的是,FluentValidation 不能自动解决这些条件规则的客户端验证问题,这就是为什么我也必须在客户端重新实现这些特殊规则。
-
提及您使用 FluentValidation 会很有用:)。 this article 中显示了一种处理方法
标签: javascript jquery asp.net-mvc forms jquery-validate