Могут ли атрибуты .NET Range и StringLength использоваться вне приложений MVC? - PullRequest
0 голосов
/ 26 марта 2012

Я хочу использовать атрибуты .NET StringLength и Range , чтобы наложить ограничения на различные свойства в моем классе. Я написал следующий очень простой код:

class AttributePlayground
{
    [StringLength(5)]
    public static String StringLengthTest { get; set; }

    [Range(10, 20)]
    public static int Age { get; set; }
}

static void Main(string[] args)
{
    AttributePlayground.StringLengthTest = "Too long!";
    AttributePlayground.Age = 34;    
}

Я ожидал ошибки или исключения, но все работает нормально.

Все примеры, которые я вижу в Интернете об этих атрибутах, показывают их в контексте MVC, но документация на них не ссылается.

1 Ответ

3 голосов
/ 26 марта 2012

Как вы знаете, атрибуты в .NET - это просто метаданные, которые вставляются в сборку во время компиляции.Если нет ничего, что будет их интерпретировать, то ничего не произойдет.

Так, например, в случае ASP.NET MVC есть валидатор, который интерпретирует эти атрибуты, например:

class AttributePlayground
{
    [StringLength(5)]
    public String StringLengthTest { get; set; }

    [Range(10, 20)]
    public int Age { get; set; }
}

class Program
{
    static void Main()
    {
        var attributePlayground = new AttributePlayground();
        attributePlayground.StringLengthTest = "Too long!";
        attributePlayground.Age = 34;

        var context = new ValidationContext(attributePlayground, null, null);
        var errors = new List<ValidationResult>();
        if (!Validator.TryValidateObject(attributePlayground, context, errors, true))
        {
            foreach (var error in errors)
            {
                Console.WriteLine(error.ErrorMessage);
            }
        }
    }
}

Но, честно говоря, если вы собираетесь провести более серьезную и сложную проверкуЯ бы порекомендовал вам не использовать декларативную логику проверки, которой являются аннотации данных.Я бы порекомендовал вам FluentValidation.NET .Это позволяет вам выразить намного более сложные правила проверки в хорошем виде, чего в противном случае было бы очень трудно достичь с помощью аннотаций данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...