jquery - 在 MVC 3 中,如何要求在表单提交到服务器之前在客户端检查复选框?

标签 jquery asp.net-mvc-3 validation

我的注册页面上有一个条款和条件复选框。 我想在发布到服务器之前将其设置为必填字段,就像表单上的其他几个字段一样。 此验证必须在客户端完成。

有人知道如何正确执行吗?

我正在使用 MVC 3、jquery.validate.min.js 和 jquery.validate.unobtrusive.min.js

型号:

[Required(ErrorMessage = "terms and condition")]
[Display(Name = "terms")]
public bool Terms { get; set; }

查看:

@Html.CheckBoxFor(m => m.Terms, new { @class = "cb" }) Terms & Condition
<button type="submit" id="btnSubmit" class="btn">Signup</button>

此外, 单击提交按钮时是否可以调用/捕获某些 JS 函数? 这样我就可以很方便的用jquery做验证然后提交了?

感谢您的阅读

最佳答案

您可以编写自定义验证属性:

public class MustBeTrueAttribute : ValidationAttribute, IClientValidatable
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if (value is bool && (bool)value)
        {
            return ValidationResult.Success;
        }
        return new ValidationResult(String.Format(ErrorMessageString, validationContext.DisplayName));
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        var rule = new ModelClientValidationRule
        {
            ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()),
            ValidationType = "shouldbetrue"
        };

        yield return rule;
    }
}

它将用于装饰您的模型:

[MustBeTrue(ErrorMessage = "terms and condition")]
[Display(Name = "terms")]
public bool Terms { get; set; }

最后在 View 中注册它:

@model MyViewModel

@using (Html.BeginForm())
{
    @Html.CheckBoxFor(m => m.Terms, new { @class = "cb" }) 
    <text>Terms &amp; Condition</text>
    @Html.ValidationMessageFor(x => x.Terms)

    <button type="submit" id="btnSubmit" class="btn">Signup</button>
}

<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>           
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>           

<script type="text/javascript">
    jQuery.validator.addMethod('shouldbetruemethod', function (value, element) {
        return $(element).is(':checked');
    }, '');

    jQuery.validator.unobtrusive.adapters.addBool('shouldbetrue', 'shouldbetruemethod');
</script>

关于jquery - 在 MVC 3 中,如何要求在表单提交到服务器之前在客户端检查复选框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6422190/

相关文章:

javascript - 如何确定未附加到 DOM 的图像的加载状态

asp.net-mvc-3 - 如何在 Asp.Net MVC3 中读取 .doc 和 .docx 文件并在 TextBox 中显示

asp.net-mvc - 复合 ViewModel 和 UpdateModel

c# - 不区分大小写比较的 CompareAttribute

javascript - 计算数组的位/字节大小

javascript - 如何读取 js-year-calendar 库(无法读取 null 的属性 'classList')

javascript - jquery(tab系统)计算高度并将高度添加到div

.net - 从字符串验证 Uri

javascript 验证仅适用于字母值

php - 如果输入为空,则不发送表单消息