jquery验证: remove error message from form

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

我有一个带有电子邮件字段和“获取新闻通讯”复选框的表单。

<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>

电子邮件字段最初是可选的,但如果用户选中获取新闻通讯复选框,则该字段是必需的。 我使用 jquery 验证在客户端添加了此内容。

$("#GetNewsletter").change(function () {
    var checked = $(this).prop("checked");
    if (checked) {
        $('#Email').rules('add', {  //set required rule
            required: true,
            messages: {
                required: "Email is required."
            }
        });
    }
    else {
        $('#Email').rules('remove', 'required'); //remove rule and call valid()
        $('#Email').valid();
    }
});

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

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

最佳答案

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

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

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

然后在 View 中

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

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

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

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

关于jquery验证: remove error message from form,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47159364/

相关文章:

javascript - jquery 验证电话号码

javascript - 需要帮助理解书中的这段代码 "jquery in action"

javascript - json将字符转换为随机字符

带有远程验证 MVC 3 的 jQuery 验证组

c# - Web API 性能?

asp.net-mvc - mvc3,你能给 Controller 一个显示名称吗?

javascript - 即使名称正确,jQuery 验证自定义验证器也未触发

jquery - 使用 jQuery 关闭引导警报不适用于此代码?

javascript - 无法再次更改元素 ID

c# - Dapper 程序在刷新后不返回任何内容