簡體   English   中英

基於數據注釋的驗證不適用於導航屬性

[英]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方法返回truecontainer對象,並返回falsecontain 在此處輸入圖片說明

但是Container包含一個無效的contain對象(因為其Code屬性設置為null ),因此我希望Validate方法不對其進行驗證。

有什么辦法嗎?

TryValidateObject方法無法遞歸工作。 文檔說:

此方法評估附加到對象類型的每個ValidationAttribute實例。 它還檢查是否提供了標有RequiredAttribute的每個屬性。 不會遞歸地驗證對象的屬性值。

解決方法是編寫您自己的TryValidateObject方法的遞歸版本。 另一個解決方案是自定義驗證屬性。 有關詳細信息,請參見此問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM