mvc 自定义下拉框验证(转自博主->那就让我这样吧)

MVC验证是怎么运行的:

在MVC的特性验证,很方便,很直接,它无论是在数据安全性上还是在页面表现上都做的不错,它的运行机制是这样的,前台表单验证规则有个名称,然后前台JS有对这个规则编写的代码,用来控制前台HTML标记的显示,而后台主要是生成验证规则和向前台参数赋值的。事实上,我们要知道的是,MVC验证不是简单的后台验证,它还有对前台页面的控制的JS部分,它一般被继承到了jQuery.validate.min.js里了,如果我们要是自己开发一套验证规则,也需要自己的JS库与相配合

C#部分:

 

  [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)]

    public sealed class NotDefaultValueAttribute : ValidationAttribute, IClientValidatable
    {
        public string InputString { get; set; }
        public NotDefaultValueAttribute()
        {
            ErrorMessage = "请选其中一项";
        }
        public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            ModelClientValidationRule rule = new ModelClientValidationRule
           {
               ValidationType = "notdefaultvalue",
               ErrorMessage = FormatErrorMessage(metadata.GetDisplayName())
           };
            rule.ValidationParameters["inputstring"] = InputString;

            yield return rule;
        }
        public override bool IsValid(object value)
        {
            if (value == null)
                return true;
            string inputString = (string)value;
            if (inputString.Contains(InputString))
            {
                return false;
            }
            return true;
        }
    }
View Code

 

为viewmodel添加特性

  public class TestModel
    {
        [Required]
        [Display(Name = "用户名")]
        public string UserName { get; set; }

        [Required]
        [DataType(DataType.Password)]
        [Display(Name = "密码")]
        public string Password { get; set; }

        [Display(Name = "爱好")]
        [NotDefaultValue(InputString = "1")]/*如果用户选择为1,则验证不通过*/
        public IEnumerable<SelectListItem> Liker { get; set; }
    }
View Code

 

在前面添加相对应的JS代码,建议将自定义的JS库放在一个单独的文件里,这样扩展性更强一些。

    $.validator.addMethod('notdefaultvalue', function (value, element, param) {
        if (value == false) {
            return true;
        }
        if (value.indexOf(param) != -1) {
            return false;
        }
        else {
            return true;
        }
    });
    $.validator.unobtrusive.adapters.addSingleVal('notdefaultvalue', 'inputstring');
View Code

 

posted @ 2016-12-27 15:00  Adam-L  阅读(97)  评论(0)    收藏  举报