知识大全 ASP.NET MVC如何实现自定义验证

Posted

篇首语:世间事飘忽不定者多,万事随心,随不了心便随缘,随不了缘便随时势。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ASP.NET MVC如何实现自定义验证相关的知识,希望对你有一定的参考价值。

ASP.NET MVC如何实现自定义验证  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

    ASP NET MVC通过Model验证帮助我们很容易的实现对数据的验证 在默认的情况下 基于ValidationAttribute的声明是验证被使用 我们只需要将相应的ValidationAttribute应用到Model的类型或者属性上即可 对于自定义验证 我们也只需要定义相应的Validation就可以了 不过服务端验证比较简单 而客户端验证就要稍微复杂一些 本文提供一个简单的实例说明在ASP NET MVC中实现自定义验证的基本步骤     一 AgeRangeAttribute        用于验证出生日期字段以确保年龄在制定的范围之内的AgeRangeAttribute定义如下 简单起见 我们直接让它直接继承自RangeAttribute 服务端验证逻辑定义在重写的IsValid方法中 并且重写了FormatErrorMessage方法以便生成针对年龄的验证消息 AgeRangeAttribute实现了IClientValidatable接口 并在实现的GetClientValidationRules方法中生成客户端验证规则 在生成的类型为 agerange 的ModelClientValidationRule 对象中包含三个参数(currentdate minage和maxage) 分别表示当前日期(用于计算年龄) 允许年龄的范围         : public class AgeRangeAttribute : RangeAttribute IClientValidatable        :         :     public AgeRangeAttribute(int minimum int maximum)        :         : base(minimum maximum)        :             :        :     public override bool IsValid(object value)        :             :         DateTime birthDate = (DateTime)value;        :         DateTime age = new DateTime(DateTime Now Ticks birthDate Ticks)         :         return age Year >= (int)this Minimum && age Year <= (int)this Maximum;        :             :        :     public override string FormatErrorMessage(string name)        :             :         return base FormatErrorMessage( 年龄 )         :             :        :     public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata ControllerContext context)        :             :         ModelClientValidationRule validationRule = new ModelClientValidationRule() ValidationType = agerange ErrorMessage= FormatErrorMessage(metadata DisplayName);        :         validationRule ValidationParameters Add( currentdate DateTime Today ToString( dd MM yyyy ))         :         validationRule ValidationParameters Add( minage this Minimum)         :         validationRule ValidationParameters Add( maxage this Maximum)         :         yield return validationRule;        :             :       二 注册客户端验证方法        由于ASP NET MVC采用JQuery Validation进行客户端验证 我们可以通过如下的这段javascript来注册用于实现客户端验证的function和添加相应的adapter 添加到jQuery validator的用于进行年龄范围验证的function具有三个参数(value element params)分别表示被验证的值 元素和传入的参数 验证逻辑必须的三个数值(当前日期 年龄范围最小和最大值)通过参数params获得 而该参数实际上是在添加adapter时从通过上面定义的GetClientValidationRules方法生成的验证规则中获取的         : jQuery validator addMethod( agerange         : function (value element params)         :        :     var minAge = params minage;        :     var maxAge = params maxage;        :        :     var literalCurrentDate = params currentdate;        :     var literalBirthDate = value;        :     var literalCurrentDates = literalCurrentDate split( )         :     var literalBirthDates = literalBirthDate split( )         :        :     var birthDate = new Date(literalBirthDates[ ] literalBirthDates[ ] literalBirthDates[ ])         :     var currentDate = new Date(literalCurrentDates[ ] literalCurrentDates[ ] literalCurrentDates[ ])         :     var age = currentDate getFullYear() birthDate getFullYear()         :     return age >= minAge && age <= maxAge        : )         :        : jQuery validator unobtrusive adapters add( agerange [ currentdate minage maxage ] function (options)         :     options rules[ agerange ] =         :         currentdate: options params currentdate         :         minage: options params minage         :         maxage: options params maxage        :     ;        :     ssages[ agerange ] = ssage;        : )     三 AgeRangeAttribute的应用        现在我们将AgeRangeAttribute 应用到一个简单的ASP NET MVC应用中 在通过VS的ASP NET MVC项目模板创建的空Web应用中 我们定义了如下一个简单的Person类型 我们定义的AgeRangeAttribute 应用到了表示出生日期的BirthDate上 并将允许的年龄上 下限设置为 和         : public class Person        :         :     [DisplayName( 姓名 )]        :     public string Name get; set;         :        :     [AgeRange( ErrorMessage = 必须在 和 之间! )]        :     [DisplayName( 出生日期 )]        :     [DisplayFormat(ApplyFormatInEditMode = true DataFormatString = :dd MM yyyy )]        :     public DateTime? BirthDate get; set;         :         然后我们添加如下一个HomeController 在默认的Action方法Index中我们将创建的Person对象呈现在默认的View中         : public class HomeController : Controller        :         :     public ActionResult Index()        :             :         return View(new Person BirthDate = DateTime Today Name = Foo )         :             :     [HttpPost]        :     public ActionResult Index(Person person)        :             :         return View(person)         :             :         如下所示的代码片断代表了View的定义 我们直接调用HtmlHelper<TModel>的扩展方法EditorModel将作为Model的Person对象以编辑模式呈现在一个表单中 最后一点不要忘了在Layout文件中讲包含上述javascript片断的js文件包含进来         : @model Person        : @using (Html BeginForm())        :         :     @Html EditorForModel()        :     <input type= submit value= Save />        :         运行我们的程序 输入不合法出生日期并点击 Save 按钮提交表单(针对第一次客户端验证) 客户端验证将会生效 具体效果如下图所示 cha138/Article/program/net/201311/11619

相关参考

知识大全 ASP.NET MVC自定义过滤属性实现log功能

ASP.NETMVC自定义过滤属性实现log功能  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 详解ASP.NET MVC PRG数据验证

详解ASP.NETMVCPRG数据验证  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我们这里将

知识大全 ASP.NET自定义错误页面

ASP.NET自定义错误页面  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ASPNET提供三种

知识大全 ASP.NET自定义错误处理页面的添加

ASP.NET自定义错误处理页面的添加  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  自定义错误

知识大全 Asp.NET自定义DataGrid控件

Asp.NET自定义DataGrid控件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一&nb

知识大全 Asp.net 2.0 自定义控件开发

Asp.net2.0自定义控件开发  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  (一)概述  

知识大全 ASP.NET自定义输出缓存提供程序

ASP.NET自定义输出缓存提供程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我们知道自从

知识大全 ASP.NET 中的自定义脚本回调

ASP.NET中的自定义脚本回调  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ASPNET客户

知识大全 使用ASP.Net中的自定义控件

使用ASP.Net中的自定义控件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  if((data

知识大全 Asp.net 用户控件添加自定义事件

Asp.net用户控件添加自定义事件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n