[英]Data-annotation based validation does not work for navigation properties
我的程序中有以下課程:
class Container
{
public Container()
{
Contain = new Contain();
}
public Contain Contain { get; set; }
}
class Contain
{
[Required]
public string Code { get; set; }
}
如您所見,我用[Required]
數據注釋屬性修飾了Code
屬性。 我也寫了一個Validate
方法來驗證我的對象:
class Program
{
static bool Validate(object command)
{
var validationContext = new ValidationContext(command, null, null);
var validationMessages = new Collection<ValidationResult>();
var result = Validator.TryValidateObject(command, validationContext, validationMessages, true);
Console.WriteLine("********** " + command.GetType().Name +" **************");
foreach (var validationMessage in validationMessages)
{
Console.WriteLine(validationMessage);
}
return result;
}
static void Main(string[] args)
{
var contain = new Contain();
Console.WriteLine(Validate(contain));
var container = new Container();
Console.WriteLine(Validate(container));
Console.ReadKey();
}
}
當我運行該程序的Validate
方法返回true
的container
對象,並返回false
的contain
:
但是Container
包含一個無效的contain
對象(因為其Code
屬性設置為null
),因此我希望Validate
方法不對其進行驗證。
有什么辦法嗎?
TryValidateObject方法無法遞歸工作。 文檔說:
此方法評估附加到對象類型的每個ValidationAttribute實例。 它還檢查是否提供了標有RequiredAttribute的每個屬性。 它不會遞歸地驗證對象的屬性值。
解決方法是編寫您自己的TryValidateObject方法的遞歸版本。 另一個解決方案是自定義驗證屬性。 有關詳細信息,請參見此問題 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.