C # DataAnnotation не выдает исключение, когда данные недействительны? - PullRequest
0 голосов
/ 06 июня 2019

У меня очень быстрое определение кода с использованием данных:

using System.ComponentModel.DataAnnotations;
class UseDataAnnotations
{
    [Required(ErrorMessage = "Name is compulsory")]
    [StringLength(20)]
    [RegularExpression(@"^[A-Z]{5, 20}$")]
    public string Name { get; set; }
}
class Program
{
    public static void Main(String [] args)
    { 
        UseDataAnnotations obj = new UseDataAnnotations();
        obj.Name = null;
        var context = new ValidationContext(obj, null, null);
        var result = new List<ValidationResult>();
        bool IsValid = Validator.TryValidateObject(
            obj, 
            context,
            null, 
            true);
        Console.WriteLine(IsValid);
        foreach(var x in result)
        {
            Console.WriteLine(x.ErrorMessage);
        }
    }
}

Я бы ожидал: пока поле «Имя» пусто, все проверки должны завершиться неудачей и вызвать какое-то исключение.

Но при запуске этой программы она просто печатает "False", больше ничего не происходит. Так в чем же я ошибся, моя «аннотация данных» сработала вообще?

Я использую vs2017. Большое спасибо.

1 Ответ

1 голос
/ 06 июня 2019

Проверка работает нормально, и вы можете получить false, как и ожидалось, но вы не передаете result методу TryValidateObject, чтобы заполнить его ошибками.Для образца:

UseDataAnnotations obj = new UseDataAnnotations();
obj.Name = null;

var context = new ValidationContext(obj, null, null);
var result = new List<ValidationResult>();

// pass the result here as the argument to fill it up with the erros.
bool IsValid = Validator.TryValidateObject(obj, context, result, true);

Console.WriteLine(IsValid);

foreach(var x in result)
{
    Console.WriteLine(x.ErrorMessage);
}

См. Рабочий образец здесь: https://dotnetfiddle.net/lI3z1M

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