MVC自定义验证逻辑
自定义验证逻辑有两种方法
1:将验证逻辑封装在自定义数据注解;好处是可以重用。
2:将验证逻辑封装在模型对象中;好处是易于实现。
自定义注解-验证字符串必须以某个子字符串开始
1:新建类
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Web; namespace MVCMusicStore.Library { public class MyStringValidationAttribute:ValidationAttribute { public MyStringValidationAttribute(string startWord) { startword = startWord; } private readonly string startword; protected override ValidationResult IsValid(object value, ValidationContext validationContext) { if (value != null) { var valueString = value.ToString(); if (!valueString.StartsWith(startword)) { return new ValidationResult("Start word wrong!"); } } return ValidationResult.Success; } } }
2:在需要引用该验证的Model类中添加该特性。
[MyStringValidation("Start")] public virtual string Address { get; set; }
3:运行MVC项目,在需要验证的字段上输入值,这里输入的字符串开始不是“Start”就会给出错误提示。
4:稍微修改自定义的特性类代码,可以实现自定义错误提示。这里如果不给出错误信息,则以默认的base提示。
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Web; namespace MVCMusicStore.Library { public class MyStringValidationAttribute:ValidationAttribute { public MyStringValidationAttribute(string startWord):base("{0} must start with special words") { startword = startWord; } private readonly string startword; protected override ValidationResult IsValid(object value, ValidationContext validationContext) { if (value != null) { var valueString = value.ToString(); if (!valueString.StartsWith(startword)) { var ErrorMessage = FormatErrorMessage(validationContext.DisplayName); return new ValidationResult(ErrorMessage); } } return ValidationResult.Success; } } }
5:修改Model中调用该特性的代码
[MyStringValidation("Start",ErrorMessage="{0} 必须以Start开始")] public virtual string Address { get; set; }
封装在模型对象中-验证某个字段必须以子字符串开始
1:修改Model中要验证字段的类,该类需要实现IValidatableObject接口
public class Order:IValidatableObject { public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { if (LastName != null && !LastName.StartsWith("Start")) { yield return new ValidationResult("The Last Name must start with Start string"); } }
2:运行该项目,字段LastName同样会验证字符串。