FluentValidation для значений списка выбора - PullRequest
0 голосов
/ 25 августа 2011

Как проверить список выбора на значение 0?

Я попробовал следующее

RuleFor(x => x.ProductId).Equal(0).WithMessage(required);
RuleFor(x => x.ProductId).NotEqual(0).WithMessage(required);
RuleFor(x => x.ProductId).GreaterThan(0).WithMessage(required);
RuleFor(x => x.ProductId).GreaterThan(0).When(x => x.ProductId < 1).WithMessage(required);
//etc.

Мой список выбора имеет значение «0» для «Выбор»... '.Если я выберу это значение в своей форме, то либо ModelState.IsValid выдаст ошибку («диапазон не ожидается»), либо если я закомментирую ModelState.IsValid, тогда значение 0 будет отправлено в БД.В любом случае проверка не происходит.Все остальные мои поля, представляющие собой сочетание строк, int и boolean, работают нормально и правильно проверяются.

Примечание: ProductId - это int в моей модели и модели представления.

Lost ..

1 Ответ

1 голос
/ 25 августа 2011

Я решил проблему. Это вопрос, который я бы не хотел задавать. Решение было комедией ошибок, но я, тем не менее, поделюсь тем, что обнаружил на этом пути.

Краткий ответ:

RuleFor(x => x.ProductId).GreaterThan(0).WithMessage(required);

Проблема была в моем контроллере и (достаточно смущающе) моё мнение.

  1. Я забыл добавить свое проверочное сообщение для ProductId. Но это не решило проблему полностью.
  2. Мой контроллер выглядел следующим образом.

[HttpPost]
public ActionResult Update(ProductModel model)
{
  if(!ModelState.IsValid)
      throw new ArgumentExpection();
//etc.
}

Первоначально я тестировал свою модель для работы с Automapper, и как только я реализовал проверку, я забыл удалить исключение ArgumentException.

То, что это сделало, никогда не давало моему правилу валидации дневной свет. Конечно, это никогда не проверялось, потому что контроллеру было предложено выдать ошибку О ModelState вместо того, чтобы отправлять обратно АКТУАЛЬНУЮ ошибку проверки. Dohhh!

[HttpPost]
public ActionResult Update(ProductModel model)
{
  if(!ModelState.IsValid)
     return View(model);//pssst! the validation error is in here.
//etc.
}

Теперь у меня есть лучшее понимание порядка вещей. Надеюсь, это поможет кому-то еще, кто глуп, как я.

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