Asp.net MVC 通过Attribute验证datamodel(二) ---使用IClientValidatable

上一篇文章实现的都是服务器端的验证,ASP.net MVC框架给我们提供了非常好的客户端验证机制。下面来修改一下上面的Attribute定义,使其实现IClientValidatable接口

//验证逻辑就是判断专辑的Title是否包含某一个关键字
    public class AlbumTitleValidateAttribute : ValidationAttribute,IClientValidatable
    {
        private readonly string _keyword;

        public AlbumTitleValidateAttribute(string keyword)
        {
            if (string.IsNullOrEmpty(keyword))
                throw new Exception("invalid usage");
            _keyword = keyword;
        }

        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            if (value != null && value.ToString().ToUpper().Contains(_keyword.ToUpper()))
            {
                return ValidationResult.Success;
            }
            else
                return new ValidationResult(string.Format("Title does not contain the keyword({0})", _keyword));
        }

        public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            ModelClientValidationRule rule = new ModelClientValidationRule
            {
                ValidationType = "albumtitlecontains",
                ErrorMessage = FormatErrorMessage(metadata.GetDisplayName())
            };
            rule.ValidationParameters["inputstring"] = _keyword;
            yield return rule;
        }
    }

 

前台需要使用这两句话来注册验证方法

$.validator.addMethod("albumtitlecontains", function (value, element, param) {
            if (value.indexOf(param) < 0) {
                return false;
            }
            else {
                return true;
            }
        });
        $.validator.unobtrusive.adapters.addSingleVal("albumtitlecontains", "inputstring");



inputstring代表参数要跟rule.ValidationParameters["inputstring"] = _keyword;的名字一致,并且是要小写

albumtitlecontains验证器的名称要跟ValidationType一致,并且是要小写

 

在使用这些之前,必须保证

1.添加所有的js引用

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

2.Web.config的客户端验证为打开状态

  <appSettings>
    <add key="ClientValidationEnabled" value="true"/> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
  </appSettings>


 

你可能感兴趣的:(exception,mvc,function,String,object,asp.net)