我有一个obeject一个完整的验证,我试图找出处理它的最佳方式。

给出的以下类:

public class LetterResponse {
 public Guid Id {get;set;}
 public bool SendBlankCart {get;set;}
 public string ToName {get;set;}
 public string ToAddress {get;set;}
}

我想使用一个dataannotation和XVAL为了验证之前,我坚持它的类,但是我有复杂的验证,需要一个以上的属性。

伪:

if SendBlankCart {
 - no validation on ToName, ToAddress 
} else {
 ToName - required.
 ToAddress - required. 
}

我想注释这样的:

[LetterResponseValidator]
public class LetterResponse {
 public Guid Id {get;set;}
 public bool SendBlankCart {get;set;}
 public string ToName {get;set;}
 public string ToAddress {get;set;}
}

和有这样的验证规则:

public class LetterResponseValidator : ValidationAttribute
    {
        public override bool IsValid(object value)
        {
            if (value.GetType() == typeof(LetterResponse))
            {
                var letterResponse = (letterResponse) value;
                if (letterResponse.SendBlankCard)
                {
                    return true;
                } else
                {
                    if (string.IsNullOrEmpty(letterResponse.FromDisplayName) || string.IsNullOrEmpty(letterResponse.ToAddress1))
                    {
                        return false;
                    }
                    return true;
                }

            }
            return false;
        }
    }

我期待的参数是我的LetterResponse类的实例,但它永远不会被调用我的验证亚军?

有谁知道的方式来处理呢?

谢谢,

哈尔

有帮助吗?

解决方案

我不认为这是与事实,你有一个类级别的验证做。要排除任何连接,尝试将虚拟required验证为“ToName”,看看是否验证被称为与否。

如果它被调用,然后让我知道,如果不是的话,那么你应该检查是否已重写你的标准模型绑定器与DataAnnotationsModelBinder在你的Global.asax.cs文件:

ModelBinders.Binders.DefaultBinder = new DataAnnotationsModelBinder();

有关更多细节,充分有效的演示项目,阅读的博客文章关于客户端验证

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top