簡體   English   中英

驗證自定義驗證屬性中的列表

[英]Validate a list in a custom validation attribute

使用自定義驗證屬性,我試圖驗證對象列表。 該類如下所示: MyClass 在自定義屬性中,我可以將object value隱藏到object value列表中,但是如何訪問對象中的屬性, IdName

我知道我可以將屬性直接放在MyClass屬性上,但是在驗證之前我需要檢查幾件事。 首先,我需要檢查列表中的項目數是否大於一個。 然后,如果計數大於1,則需要檢查IdName是否均為空。

我的想法是,在一個屬性中驗證整個列表會更容易。 但是,即使確實將屬性放在MyClass屬性上,我仍然需要訪問列表中的值。

如果將列表作為IsValidvalue參數傳遞,則所有列表項都將在value范圍內。 如果將屬性放在MyClass屬性上,則需要以其他方式獲取值。 我已經可以使用下面的代碼獲取單個值,但無法獲取值列表。

底線:我需要一種從object value參數或ValidationContext validationContext參數訪問列表中所有值的方法。

獲取單個值(而不是值列表):

var property = validationContext.ObjectType.GetProperty("MyProperty");
var value = property.GetValue(validationContext.ObjectInstance, null);

自定義屬性:

public sealed class ValidateNewSauList : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var myList = value as IList;
    } 
}

這是用戶定義的類:

public class MyClass
{
    public int Id { get; set; }
    public string Name { get; set; }
}

業務邏輯有點不清楚,因此,僅根據合格的猜測,解決方案可能如下。 假設您具有_lst = List<MyClass> ,則可以遍歷列表並將驗證規則(例如,稱為ValidateID()ValidateName() )應用於這兩個屬性:

foreach (MyClass _mc in _lst)
{
   ValidateID (_mc.Id);
   ValidateName (_mc.Name);

}

希望這會有所幫助。 最好的祝福,

暫無
暫無

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

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