У меня есть простая модель FilesModel
для обновления строки Description
и логическое значение флажка Archived
для нескольких (уже загруженных) файлов, а FilesModel
имеет валидатор FilesModelValidator
, который запускается когда эти данные будут опубликованы. Этот валидатор не делает ничего, кроме проверки того, что у каждого файла есть описание. Я знаю, что он работает и правильно возвращает ошибку для пустых описаний, основанную на моей отладке.
Тем не менее, когда управление передается методу Action в Controller, ModelState отличается от того, что я ожидаю. В полях описания нет ошибок, но для каждого флажка отмечена одна ошибка: «Значение« on »недопустимо для Archived».
Валидация такого рода отлично работает в других областях сайта, поэтому я уверен, что есть одна минутка, которую я пропускаю. Любые предложения относительно того, почему это может происходить и как это исправить?
Validator
public FilesModelValidator()
{
RuleFor(f => f.Files)
.Must(AllHaveADescription).WithMessage("Must have a description");
}
public static bool AllHaveADescription(Files files)
{
// This is run on postback, and returns false when any Description is empty
return files.All(f => f.Description != null && f.Description.Length > 0);
}
Контроллер
[HttpPost]
public virtual ActionResult Update(FilesModel model)
{
// At this point, ModelState contains an error for each checked checkbox
// and no errors for empty descriptions
if (ModelState.IsValid)
{
// Save
}
return View(model);
}