ASP.NET MVC:为什么范围数据注释不在客户端的复选框上工作?

时间:2014-06-18 16:15:51

标签: c# asp.net-mvc asp.net-mvc-4 data-annotations

我有一个带有Required数据注释的字段的表单,然后我有一个"接受条款和条件"带有数据注释的复选框[Range(typeof(bool), "true", "true", ErrorMessage="You must accept Terms And Conditions to proceed")] 一切正常,但令人讨厌的是Required数据注释在发布之前触发错误..我的意思是,我点击提交,表单没有发布帖子,它显示错误,但与范围,表格帖子,然后显示错误。

为什么?这是一种常见的行为吗?

2 个答案:

答案 0 :(得分:1)

我终于找到了这个解决方案:

public class EnforceTrueAttribute : ValidationAttribute, IClientValidatable
    {
        public override bool IsValid(object value)
        {
            if (value == null) return false;
            if (value.GetType() != typeof(bool)) throw new InvalidOperationException("can only be used on boolean properties.");
            return (bool)value == true;
        }

        public override string FormatErrorMessage(string name)
        {
            return "The " + name + " field must be checked in order to continue.";
        }

        public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            yield return new ModelClientValidationRule
            {
                ErrorMessage = String.IsNullOrEmpty(ErrorMessage) ? FormatErrorMessage(metadata.DisplayName) : ErrorMessage,
                ValidationType = "enforcetrue"
            };
        }
    }

在我的JS中:

jQuery.validator.addMethod("enforcetrue", function (value, element, param) {
            return element.checked;
        });
        jQuery.validator.unobtrusive.adapters.addBool("enforcetrue");

答案 1 :(得分:0)

ASP.Net MVC令人烦恼的缺点之一是复选框验证。不显眼的验证不适用于复选框。请参阅替代解决方案:

ASP.NET MVC CheckBox Validations (server and client side)

MVC unobtrusive validation on checkbox not working