zoukankan      html  css  js  c++  java
  • MVC小系列(十七)【自定义验证规则给下拉框】


    因为下拉框不支持验证,所以写一个attribute特性,让它继承ValidationAttribute
    mvc的特性验证,很直接,无论是数据安全特性上还是页面表现上都不错,
    它的运行机制: 前台表单验证规则有个名称,然后前台js有对这个规则编写的代码,用来控制前台html标记的显示,而后台主要是生成验证规则和向前台参数赋值的,
    mvc的验证不是简单的后台验证,一般继承到了 jquery.validate.min.js里

    第一步 写后台验证规则,可能需要这样

    [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

    第二步在model层加上验证:

    [NotDefaultValue(InputString = "1")]/*如果用户选择为1,则验证不通过*/
    public IList<SelectListItem> ActiveCategories { get; set; }

    第三步 在前台添加相应的js代码:

    <script>
        $.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');
    </script>
  • 相关阅读:
    秦腾与教学评估【前缀和+二分】
    c++中成员函数声明时const得作用
    分形【递归】
    飞行兄弟【二进制枚举+异或】
    爬取4k图片网图片
    爬虫爬取博客园文章的文字【练手】
    【YBTOJ】求 f 函数
    【YBTOJ】划分数列
    【学习笔记】高斯消元法
    【Luogu P4588】 [TJOI2018]数学计算
  • 原文地址:https://www.cnblogs.com/niuzaihenmang/p/5626568.html
Copyright © 2011-2022 走看看