簡體   English   中英

C#無法使用自定義驗證屬性來驗證屬性

[英]C# Unable to validate property using a custom validate attribute

我有一個驗證類:

public sealed class ValidationSet : ValidationAttribute
{
    private List<string> _set = new List<string>();
    public ValidationSet(params string[] setOfValues)
    {
        _set = setOfValues.ToList();
    }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if (!(_set.Select(s => s.ToLower()).Contains(value.ToString().ToLower())))
        {
            throw new Exception("not in the set");
        }
        return ValidationResult.Success;
    }
}

這是我的用法:

public class Car
{
    [ValidationSet("honda", "gm")]
    public string CarMake{ get; set; }

}

當我通過以下方式實例化Car類時:

...
Car c = new Car();
c.CarMake = "ford";
...

什么都不會發生,如果我打印c.CarMake,則顯示為福特-驗證未發生。

我只是想知道我在這里想念什么。

謝謝!

只需實例化該類並分配該字段就不會調用IsValid,您需要在檢查Car,看到CarMake上具有ValidationAttribute並調用IsValid的框架中使用該類。

在此示例中,asp:DynamicValidator正在執行工作:

如何:自定義數據字段驗證

我將研究FluentValidation。 您可以為Car創建一個驗證器類。

public class CarValidator : AbstractValidator<Car>
{
    public CarValidator() {
        RuleFor(m => m.CarMake).Equal("gm").Equal("honda");
    }
}

用法:

var car = new Car { CarMake = "honda" };
var validator = new CarValidator();
if (validator.Validate(car).IsValid)
    // car is valid

暫無
暫無

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

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