ASP.NET MVC验证 - 自定义验证规则、验证2个属性值不等【待验证】
2015-07-22 10:59
519 查看
提示:保存后才提示错误信息
自定义验证特性,继承ValidationAttribute并实现IClientValidatable
这次重写了基类的IsValid()方法的另外一个重载,因为该重载包含了验证上下文ValidationContext,从中可以获取属性及属性值。
Viewmodel
[NotEqualTo("UserName",ErrorMessage="不能与用户名的值相同")]用来比较属性UserName的值。
在mvc中,密码比较使用
扩展jquery的验证,jQuery.validator.noteaualto.js
[code]//意思是表单值为空时也能通过验证
[/code]
Register.cshtml视图
效果:
转自:http://www.csharpwin.com/dotnetspace/13573r4911.shtml
自定义验证特性,继承ValidationAttribute并实现IClientValidatable
这次重写了基类的IsValid()方法的另外一个重载,因为该重载包含了验证上下文ValidationContext,从中可以获取属性及属性值。
usingSystem.ComponentModel.DataAnnotations; usingSystem.Globalization; usingSystem.Web.Mvc; namespaceMvcValidation.Extension { publicclassNotEqualToAttribute:ValidationAttribute,IClientValidatable { publicstringOtherProperty{get;set;} publicNotEqualToAttribute(stringotherProperty) { OtherProperty=otherProperty; } protectedoverrideValidationResultIsValid(objectvalue,ValidationContextvalidationContext) { //从验证上下文中可以获取我们想要的的属性 varproperty=validationContext.ObjectType.GetProperty(OtherProperty); if(property==null) { returnnewValidationResult(string.Format(CultureInfo.CurrentCulture,"{0}不存在",OtherProperty)); } //获取属性的值 varotherValue=property.GetValue(validationContext.ObjectInstance,null); if(object.Equals(value,otherValue)) { returnnewValidationResult(FormatErrorMessage(validationContext.DisplayName)); } returnnull; } publicSystem.Collections.Generic.IEnumerable<ModelClientValidationRule>GetClientValidationRules(ModelMetadatametadata,ControllerContextcontext) { varrule=newModelClientValidationRule { ValidationType="notequalto", ErrorMessage=FormatErrorMessage(metadata.GetDisplayName()) }; rule.ValidationParameters["other"]=OtherProperty; yieldreturnrule; } } }
Viewmodel
[NotEqualTo("UserName",ErrorMessage="不能与用户名的值相同")]用来比较属性UserName的值。
publicclassRegisterModel { [Required] [StringLength(6,MinimumLength=2)]//加 [Display(Name="用户名")] //[Remote("CheckUserName","Validate",ErrorMessage="远程验证用户名失败")] [NoInput("demo,jack",ErrorMessage="不能使用此名称")] publicstringUserName{get;set;} [Required] [DataType(DataType.EmailAddress)] [Display(Name="邮件")] //[Email] publicstringEmail{get;set;} [Required] [StringLength(100,ErrorMessage="{0}栏位最少{2}个字,最多{1}个字",MinimumLength=6)] [DataType(DataType.Password)] [Display(Name="密码")] publicstringPassword{get;set;} [DataType(DataType.Password)] [Display(Name="确认密码")] [System.ComponentModel.DataAnnotations.Compare("Password",ErrorMessage="密码和确认密码不匹配。")] publicstringConfirmPassword{get;set;} [NotEqualTo("UserName",ErrorMessage="不能与用户名的值相同")] publicstringOtherName{get;set;} }
在mvc中,密码比较使用
[System.Web.Mvc.Compare("Password",ErrorMessage="密码和确认密码不匹配。")]
扩展jquery的验证,jQuery.validator.noteaualto.js
jQuery.validator.addMethod('notEqualTo',function(value,element,param){
[code]//意思是表单值为空时也能通过验证
//但,如果表单有值,就必须满足||后面的条件,否则返回false
returnthis.optional(element)||value!=$(param).val();
});
//第一个参数是jquery验证扩展方法名
//第二个参数与rule.ValidationParameters["other"]中的key对应
//option是指ModelClientValidationRule对象实例
jQuery.validator.unobtrusive.adapters.add('notequalto',['other'],function(options){
options.rules['notEqualTo']='#'+options.params.other;
if(options.message){
options.messages['notEqualTo']=options.message;
}
});
[/code]
Register.cshtml视图
@modelMvcValidation.Models.RegisterModel
@{
ViewBag.Title="注册";
}
<hgroupclass="title">
<h1>@ViewBag.Title.</h1>
<h2>创建新帐户。</h2>
</hgroup>
@using(Html.BeginForm()){
@Html.AntiForgeryToken()
@Html.ValidationSummary()
<fieldset>
<legend>注册表单</legend>
<ol>
<li>
@Html.LabelFor(m=>m.UserName)
@Html.TextBoxFor(m=>m.UserName)
</li>
<li>
@Html.LabelFor(m=>m.Email)
@Html.TextBoxFor(m=>m.Email)
</li>
<li>
@Html.LabelFor(m=>m.Password)
@Html.PasswordFor(m=>m.Password)
</li>
<li>
@Html.LabelFor(m=>m.ConfirmPassword)
@Html.PasswordFor(m=>m.ConfirmPassword)
</li>
<li>
@Html.LabelFor(m=>m.OtherName)
@Html.TextBoxFor(m=>m.OtherName)
</li>
</ol>
<inputtype="submit"value="注册"/>
</fieldset>
}
@sectionScripts{
@Scripts.Render("~/bundles/jqueryval")
<scriptsrc="~/Scripts/jQuery.validator.noteaualto.js"></script>
}
效果:
转自:http://www.csharpwin.com/dotnetspace/13573r4911.shtml
相关文章推荐
- asp.net c# 断点续传 下载 Accept-Ranges
- 如何使用ASP.NET中的类库实现邮件的发送
- 文件写入文件分布式系统(asp.net C#)
- asp.net IsPostBack 简述
- ASP.NET GridView 自增編號
- 7 天玩转 ASP.NET MVC — 第 2 天
- ASP.NET中图片显示方法实例
- ASP.NET仿新浪微博下拉加载更多数据瀑布流效果
- IWAM账号密码不一致引起IIS无法处理ASP文件
- 用ASP实现超长内容的word模板替换objDoc.Content.Find.Execute
- IIS7.0下ASP+Access(MDB)应用环境设置要点
- IIS无法在后台生成WORD文件的故障
- IIS6主机上开启webservice的权限设置问题
- 关于使用UTF-8开发ASP网站
- 用ADSI+ASP添加IP到IIS禁止访问列表中
- 【西祠日志】【05】修修补补asp留言板,学习git,asp的ajax实现(2015.07.21周二)
- asp.net 如何配置authentication,完成基于表单的身份验证
- The introduction to Web.config of ASP.NET #Reprinted#
- Spring aspectJ切面使用步骤
- JasperReports+iReport在eclipse中的使用