根据引用的类使用数据注释进行验证

时间:2015-04-15 10:21:55

标签: c# asp.net-mvc validation data-annotations

我可以使用不同的验证消息,具体取决于引用我的模型类的类...

例如。

public class AdviceUnit
{
    public Client MainClient {get;set;}

    public Client PartnerClient {get;set;}

    public List<Investments> JointInvestments {get;set;}
}

public class Client
{
    public Guid Id {get;set;}

    [Required(ErrorMessage = "ERROR MESSAGE but a different ")]
    public string FirstName {get;set;}

    [Required(ErrorMessage = "client last name is missing")]
    public string LastName {get;set;}

    [Required(ErrorMessage = "client date of birth is missing")]
    public DateTime DateOfBirth {get;set;}

}

我真正想要的是针对main&amp ;;的不同验证错误消息伙伴客户。

例如

[Required(ErrorMessage = "main client first name is missing")]
[Required(ErrorMessage = "partner client first name is missing")]

我的视图绑定到AdviceUnit对象。

1 个答案:

答案 0 :(得分:1)

就像BDH所说的那样(抱歉我没有窃取您的答案,信用证首先发布给BDH),您可以实现自定义的必需验证属性。

作为概念证明:

  1. 添加类型为&#39; ClientType&#39;的属性将字符串设置为Client类,将其设置为&#39; Main&#39;或者&#39;合作伙伴&#39;。验证期间将检索此属性:
  2.  public string ClientType {get; set;}
    
    1. 实施自定义必需属性并设置替换键:
    2. public class CustomRequiredAttribute : RequiredAttribute
      {
          protected override ValidationResult IsValid
            (object value, ValidationContext validationContext)
          {
              var instance = validationContext.ObjectInstance;
              var instancePropertyValue = instance.GetType().GetProperty("ClientType").GetValue(instance, null);
              return new ValidationResult(ErrorMessage.Replace("[replaceText]" ,instancePropertyValue.ToString()));
          }
      }
      
      1. 使用CustomRequiredAttribute,使用替换键:
      2. [CustomRequired(ErrorMessage = "[replaceText] client first name is missing ")]
        public string FirstName {get;set;}
        

        唯一需要注意的是,必须在发布/验证之前设置ClientType属性。