2011-08-25 4 views
0

선택 목록의 값을 0으로 확인하려면 어떻게해야합니까?선택 목록 값에 대한 FluentValidation

나는 다음과 같은

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 값이 db에 게시됩니다. 어떤 방법으로도 유효성 검사가 이루어지지 않습니다. 문자열, int 및 부울을 혼합하여 사용하는 다른 모든 필드는 올바르게 작동하고 올바르게 적용됩니다.

참고 : ProductId는 내 모델 및 뷰 모델의 int입니다.

잃어버린 ..

답변

1

나는이 문제를 해결했다. 이것은 내가 결코 묻지 않았기를 바랬던 질문이다. 그 해결책은 오류의 코미디 였지만, 그럼에도 불구하고 내가 발견 한 것을 공유 할 것입니다.

짧은 대답은 다음과 같습니다

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을 제거하는 것을 잊었다.

이것은 무엇인가에 대한 유효성 검사 규칙을 밝히지 않았습니다. 물론 컨트롤러가 ACTUAL 유효성 검사 오류를 다시 게시하는 대신 ModelState에 대해 오류를 발생 시키라는 명령을 받았기 때문에 유효성을 검사하지 않았습니다. Dohhh!

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

나는 지금 상황에 대해 더 잘 이해하고 있습니다. 희망이 나는 바보 같은 다른 사람을 도와줍니다.