1.手动验证指定Model
只能单个Model 验证
using System.ComponentModel.DataAnnotations;
var ArrValidation = new List<ValidationResult>();
var isValid = Validator.TryValidateObject(ArrCusBusInfo[0], new ValidationContext(ArrCusBusInfo[0]), ArrValidation, true);
2.自定义验证 继承ValidationAttribute
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
public class MyValidAttribute : ValidationAttribute
{
public IEnumerable<string> Values { get; private set; }
public MyValidAttribute(string value)
{
this.Values = new string[] { value };
}
public MyValidAttribute(prams string[] values)
{
this.Values = values;
}
public override bool IsValid(object value)
{
if (null == value)
{
return true;
}
return this.Values.Any(item => value.ToString() == item);
}
public override string FormatErrorMessage(string name)
{
string[] values = this.Values.Select(value => string.Format("'{0}'",value)).ToArray();
return string.Format(base.ErrorMessageString, name,string.Join(",", values));
}
}
CusBusInfo.cs
[DisplayName("性别")]
[MyValid("M", "F", "m", "f", ErrorMessage = "性别只能是M/F")]
public string Gender { get; set; }
3.Controller手动验证
ModelState.Remove("BSA");//去除某些字段验证
ModelState.AddModelError("Gender", "'性别只能是M/F");//手动增加验证错误
4.让数据类型实现IValidatableObject接口
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
CusBusInfo OCusBusInfo = validationContext.ObjectInstance as CusBusInfo;
if (string.IsNullOrEmpty(OCusBusInfo.Gender))
{
yield return new ValidationResult("'Gender'是必需字段", new string[] { "Gender" });
}
else if (!new string[]{"M","F"}.Any(g=>string.Compare(OCusBusInfo.Gender,g, true) == 0))
{
yield return new ValidationResult("性别只能是M/F之一", new string[] { "Gender" });
}
}
5.让数据类型实现IDataErrorInfo接口
public string this[string columnName]
{
get
{
switch (columnName)
{
case "Gender":
{
if (string.IsNullOrEmpty(this.Gender))
{
return "'性别'是必需字段";
}
else if (!new string[] { "M", "F" }.Any(g => string.Compare(this.Gender, g, true) ==
{
return "性别只能是M/F之一";
}
return null;
}
default: return null;
}
}
}