ASP.NET MVC验证 - 自定义验证规则、验证2个属性值不等【待验证】
来源:互联网 发布:数据库物理设计实例 编辑:程序博客网 时间:2024/05/30 04:11
提示:保存后才提示错误信息
自定义验证特性,继承ValidationAttribute并实现IClientValidatable
这次重写了基类的IsValid()方法的另外一个重载,因为该重载包含了验证上下文ValidationContext,从中可以获取属性及属性值。
using System.ComponentModel.DataAnnotations;using System.Globalization;using System.Web.Mvc;namespace MvcValidation.Extension{ public class NotEqualToAttribute : ValidationAttribute,IClientValidatable { public string OtherProperty { get; set; } public NotEqualToAttribute(string otherProperty) { OtherProperty = otherProperty; } protected override ValidationResult IsValid(object value, ValidationContext validationContext) { //从验证上下文中可以获取我们想要的的属性 var property = validationContext.ObjectType.GetProperty(OtherProperty); if (property == null) { return new ValidationResult(string.Format(CultureInfo.CurrentCulture, "{0} 不存在", OtherProperty)); } //获取属性的值 var otherValue = property.GetValue(validationContext.ObjectInstance, null); if (object.Equals(value, otherValue)) { return new ValidationResult(FormatErrorMessage(validationContext.DisplayName)); } return null; } public System.Collections.Generic.IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) { var rule = new ModelClientValidationRule { ValidationType = "notequalto", ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()) }; rule.ValidationParameters["other"] = OtherProperty; yield return rule; } }}
View model
[NotEqualTo("UserName", ErrorMessage = "不能与用户名的值相同")]用来比较属性UserName的值。
public class RegisterModel { [Required] [StringLength(6, MinimumLength = 2)] //加 [Display(Name = "用户名")] //[Remote("CheckUserName","Validate", ErrorMessage = "远程验证用户名失败")] [NoInput("demo,jack",ErrorMessage = "不能使用此名称")] public string UserName { get; set; } [Required] [DataType(DataType.EmailAddress)] [Display(Name = "邮件")] //[Email] public string Email { get; set; } [Required] [StringLength(100, ErrorMessage = "{0}栏位最少{2}个字,最多{1}个字", MinimumLength = 6)] [DataType(DataType.Password)] [Display(Name = "密码")] public string Password { get; set; } [DataType(DataType.Password)] [Display(Name = "确认密码")] [System.ComponentModel.DataAnnotations.Compare("Password", ErrorMessage = "密码和确认密码不匹配。")] public string ConfirmPassword { get; set; } [NotEqualTo("UserName", ErrorMessage = "不能与用户名的值相同")] public string OtherName { get; set; } }
在mvc中,密码比较使用
[System.Web.Mvc.Compare("Password", ErrorMessage = "密码和确认密码不匹配。")]
扩展jquery的验证,jQuery.validator.noteaualto.js
jQuery.validator.addMethod('notEqualTo', function(value, element, param) {
//意思是表单值为空时也能通过验证
//但,如果表单有值,就必须满足||后面的条件,否则返回false
return this.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;
}
});
Register.cshtml视图
@model MvcValidation.Models.RegisterModel@{ ViewBag.Title = "注册";}<hgroup class="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> <input type="submit" value="注册" /> </fieldset>}@section Scripts { @Scripts.Render("~/bundles/jqueryval") <script src="~/Scripts/jQuery.validator.noteaualto.js"></script>}
效果:
转自:http://www.csharpwin.com/dotnetspace/13573r4911.shtml
0 0
- ASP.NET MVC验证 - 自定义验证规则、验证2个属性值不等【待验证】
- ASP.net MVC 属性验证
- ASP.NET中,ValidationExpression 验证规则属性
- Asp.net Mvc自定义客户端验证(CheckBox列表的验证)
- ASP.Net MVC 自定义用户验证
- ASP.NET MVC ValidationAttribute 服务器端自定义验证
- Asp.net mvc 自定义服务器端验证
- ASP.NET MVC系列之 如何实现自定义验证(服务端验证+客户端验证)
- ASP.NET MVC中的验证
- ASP. net MVC 验证码
- asp.net MVc 数据验证
- ASP.NET MVC中的验证
- ASP.NET MVC 3.0验证
- ASP.NET MVC 验证方式
- asp.net Mvc验证码
- ASP.NET MVC 数据验证
- Asp.net mvc 服务器验证
- Asp.net Mvc 数据验证
- android-async-http使用总结
- [转]C++ #pragma
- iOS开发——keychain的使用
- LeetCode 36. Valid Sudoku(数独游戏)
- JVM调优总结(2):基本垃圾回收算法
- ASP.NET MVC验证 - 自定义验证规则、验证2个属性值不等【待验证】
- Android开发效率—Eclipse快捷键
- uploadify的使用
- 37 Spark之Task执行原理及结果
- mysql出现innodb缺失错误 #1286
- 拼音库
- 链表-结点间交换
- 适配器模式(Adapter):类适配器、对象适配器
- SpringMVC中使用Interceptor拦截器