Почему StringLength не проверяется при использовании ValidationContext вне MVC? - PullRequest
0 голосов
/ 01 июля 2019

У меня есть страница ввода данных в моем приложении MVC и определены аннотации данных для проверки ввода.Это работает как ожидалось.

У меня также есть файл для загрузки, который должен проверить входящие данные с теми же правилами, поэтому вместо того, чтобы снова писать правила, я решил отобразить каждую строку в экземпляр класса модели, чтобы я мог использоватьте же правила проверки вне контроллера (описаны в других ответах SO.)

Атрибут [Обязательный] работает, но другие, которые я использую, StringLength и Range, не работают.Вот пример, который я тестировал в LinqPad с тем же результатом:

void Main()
{
    var model = new Model { Name = "Test String" };
    var validationResults = new List<ValidationResult>();
    var validationContext = new ValidationContext(model, null, null);
    Validator.TryValidateObject(model, validationContext, validationResults);
    validationResults.Select(w => w.ErrorMessage).Dump();
}

// Define other methods and classes here
public class Model
{
    [Required, StringLength(8, MinimumLength = 1, ErrorMessage = "String length is outside of range.")]
    public string Name { get; set; }
}

Я ожидал бы, что StringLength вызовет ошибку проверки, так как он больше максимальной длины 8, но это не так.Чего мне не хватает?

1 Ответ

2 голосов
/ 01 июля 2019

Вам необходимо добавить еще один параметр:

Validator.TryValidateObject(model, validationContext, validationResults, true);

Без этого он проверяется только для «Обязательный».

Ссылка MSDN

validateAllProperties Boolean

true для проверки всех свойств;если false, проверяются только обязательные атрибуты

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