jquery验证:从表单中删除错误消息

时间:2017-11-07 13:37:38

标签: jquery asp.net-mvc jquery-validate unobtrusive-validation

我有一个包含电子邮件字段和“获取简报”复选框的表单。

python cqlsh [options] [host [port]] 

电子邮件字段最初是可选的,但如果用户选中“获取简报”复选框,则需要该字段。 我在客户端使用jquery验证添加了这个。

<form method="post" class="form-horizontal" action="">

<input class="form-control" type="text" id="Email" name="Email" value="test@test.com" />
<span class="text-danger field-validation-valid" data-valmsg-for="Email" data-valmsg-replace="true"></span>

<input data-val="true" id="GetNewsletter" name="GetNewsletter" type="checkbox" value="true" />

</form>

如果未选中该复选框,则删除该规则并调用valid()以重置输入的状态。不幸的是,这不会删除验证消息。

是否有内置方法来清除验证消息?我想避免操纵标记,例如删除/添加验证类。

2 个答案:

答案 0 :(得分:1)

您只能动态添加/删除使用插件方法 1 添加的规则。

$('form').validate({
    rules: {
        Email: {
            required: true
        }
    }
});

DEMO:jsfiddle.net/zh5uofs9/

如果您还有其他任何内容required,例如内联属性 2 ,那么您将无法使用.rules('remove') 1

DEMO 2:jsfiddle.net/zh5uofs9/1/

1 根据文件:

  

&#34;仅处理通过rules-option或rules("add")指定的规则。&#34;

2 由于您正在使用ASP,您的.validate()实例正由Unobtrusive Validation插件自动构建,并且您具有声明规则的内联属性。

底线:邮件无法清除,因为规则未被删除。在使用内联验证属性时,您无法动态禁用或删除规则。

答案 1 :(得分:1)

您的(不成功)尝试只会删除视图中的错误消息,您仍然需要在控制器方法中编写代码来验证数据(客户端验证是一个很好的奖励,但它很容易被绕过,你必须在服务器上验证。)

相反,请使用实现ValidationAttribute的条件IClientValidatable,以便同时获得客户端和服务器端验证。此类属性的一个示例是foolproof [RequiredIf][RequiredIfTrue]属性,您将其应用于模型

[RequiredIfTrue("GetNewsletter", ErrorMessage = "...")]
public string Email { get; set; }

然后在视图中

@Html.TextBoxFor(m => m.Email)
@Html.ValidationMessageFor(m => m.Email)

@Html.CheckBoxFor(m => m.GetNewsletter)

如果选中该复选框,并且Email为空,则会显示验证消息(如果绕过客户端验证,则POST方法中的ModelState将无效。

或者,如果您想编写自己的条件验证属性,请参阅The Complete Guide To Validation In ASP.NET MVC 3 - Part 2以获取一个好的指南。