[转载]asp.net mvc + JqueryValidate(二)

[转载]asp.net mvc + JqueryValidate(二) – { TT.Net } – 博客园.

上一篇 Asp.net MVC +JQueryValidation + AjaxForm 里简单完成了一下数据的效验

如果下载DEMO试过的朋 友可能发现MyModel里定义的DataType=Url和DataType=EMailAddress的验证是没有生效的

这里来补 充一下

这次就不做DEMO了,就2段代码加入一下就可以了

新建一个 DataTypeValidator.cs

using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;

namespace JqueryValidate
{
    public class DataTypeValidator : DataAnnotationsModelValidator<DataTypeAttribute>
    {
        private readonly string message;

        public DataTypeValidator(ModelMetadata metadata, ControllerContext context, DataTypeAttribute attribute)
            : base(metadata, context, attribute)
        {
            message = attribute.ErrorMessage;
        }

        public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
        {
            var rules = new List<ModelClientValidationRule>();
            ModelClientValidationRule rule;
            switch (Attribute.DataType)
            {
                case DataType.EmailAddress:
                    rule = new ModelClientValidationRule {ErrorMessage = message, ValidationType = "email"};
                    rule.ValidationParameters.Add("true", "true");
                    rules.Add(rule);
                    break;
                case DataType.Url:
                    rule = new ModelClientValidationRule {ErrorMessage = message, ValidationType = "url"};
                    rule.ValidationParameters.Add("true", "true");
                    rules.Add(rule);
                    break;
                //case DataType.Date:
                //    rule = new ModelClientValidationRule {ErrorMessage = message, ValidationType = "date"};
                //    rule.ValidationParameters.Add("true", "true");
                //    rules.Add(rule);
                //    break;
                //case DataType.DateTime:
                //    rule = new ModelClientValidationRule {ErrorMessage = message, ValidationType = "date"};
                //    rule.ValidationParameters.Add("true", "true");
                //    rules.Add(rule);
                //    break;
            }
            return rules;
        }
    }
}

这里我把datetime这个注释掉了。因为JQueryvalidate的日期格式是 yyyy/mm/dd这样的,而我前台是yyyy年MM月dd日,而后台是支持这样的格式的,所以这里注释掉就让

HomeController.cs里的

 if (!ModelState.IsValid)
                return JsonError(GetError(ModelState));

来返回json回传的错误吧

image

新建了上面那个继承自

DataAnnotationsModelValidator<DataTypeAttribute

的类后

还在要Global.ascx.cs的Application_Start里注册一下这个 DataAnnotationsModelValidatorProvider

            DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(DataTypeAttribute), typeof(DataTypeValidator));

前台代码不需要修改,URL和EMAIL的前台验证就完成了。

image

image

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏