.Net MVC Validation 验证Model

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;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/foreverhot1019/article/details/82867320