문제

ModelState를 새로 고침합니다

안녕하세요, ASP.NET MVC 컨트롤러의 ModelState에 대한 질문이 있습니다.

사용자가보기에서 특정 옵션을 선택하면 "인증"의 시작 날짜 및 종료 날짜는 입력 된 다른 날짜에 따라 설정됩니다.

이 문제는 인증 날짜가 NULL로 돌아오고 인증 metadata 클래스는 필드를 [필수]로 지정하여 ModelSTate가 동작이로드 되 자마자 유효하지 않습니다.

ModelSate 오류를 수동으로 제거하면이 작업이 작동하지만 더 나은 방법이 있는지 궁금합니다. ModelState를 새로 고칠 수있는 방법이 있습니까? 필드를 필요로하지 않아야합니까? 아니면 JavaScript와 함께보기에서 날짜 값을 추가해야합니까?

public ActionResult Create(FormCollection fc, Certification certification, Absence absence)
{
    if (certification.CertificationTypeID == 1)
    {
        certification.CertificationStartDate = absence.StartDate;
        certification.CertificationEndDate = absence.StartDate.AddDays(7);
        this.ModelState.Remove("CertificationStartDate");
        this.ModelState.Remove("CertificationEndDate");
    }

    if (this.ModelState.IsValid)
    {
        // save
        return RedirectToAction("Index");
    }
     return View();
}

또한 보시다시피 인증 유형의 ID 값을 하드 코딩했습니다. 값을 조회 테이블 값과 비교하는 가장 좋은 방법은 무엇입니까? 열거가 가장 좋은 방법입니까?

감사

도움이 되었습니까?

해결책

분명히 이것은 개인적인 것이지만 오류 메시지를 제거하지는 않습니다.

간단한 솔루션을 사용하는 경우 [필수] 속성을 제거하고 컨트롤러에 유효성 검사 코드를 추가하여 날짜가 누락 된 경우 오류를 추가하거나 올바른 유형 인 경우 대체 값으로 설정합니다.

더 복잡한 솔루션을 원한다면 검증을 모델 수준에서 배치 할 것입니다. 아마도 모델이 구현 해야하는 기본 클래스 또는 인터페이스 일 수 있습니다. static validate (ivalidate object) 메소드가있는 ValidationHelper 클래스는 유효성 검사를 검사하고 모델에서 유효성 검사 메소드를 호출합니다. 그런 다음 ValidationErrors 모음을 반환합니다. 그런 다음 모델 유효성 검사를 이해하고이를 ModelSTate 오류에 매핑하는 사용자 정의 모델 바인더가 작성됩니다.

다른 팁

다음 접근법은 모델 상태를 새로 고치고 모델 디자인을 [필수] 속성과 일치하게 유지할 수 있습니다.

제 경우에는 내 모델이 API를 사용하는 일반 레벨 사용자가 변경할 수없는 필수 필드를 갖기를 원합니다.

ModelState.Remove("ChangeDate");
ModelState.Add("ChangeDate", new ModelState());
ModelState.SetModelValue("ChangeDate", new ValueProviderResult(club.ChangeDate, DateTime.Now.ToString(), null));

이렇게하면 필요한 필드를 제거 할 필요가 없으며 JavaScript로 날짜를 제공 할 필요도 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top