program story

ModelState.IsValid == false, 그 이유는 무엇입니까?

inputbox 2020. 8. 8. 12:37
반응형

ModelState.IsValid == false, 그 이유는 무엇입니까?


ModelState를 유효하지 않게 만드는 오류 목록은 어디에서 찾을 수 있습니까? ModelState 개체에 오류 속성이 표시되지 않았습니다.


"오류가 0 개이고 IsValid == false 일 수 있습니까?"정보 : https://github.com/Microsoft/referencesource/blob/master/System.Web/ModelBinding/ModelStateDictionary.cs#L37-L41 의 MVC 소스 코드는 다음과 같습니다.

public bool IsValid {
    get {
        return Values.All(modelState => modelState.Errors.Count == 0);
    }
}

이제 그럴 수없는 것 같습니다. 그것은 ASP.NET MVC v1을위한 것입니다.


아마도 Visual Studio에서 프로그래밍 할 것이므로 쉬운 디버깅 단계에 중단 점을 사용할 수있는 가능성을 활용하는 것이 좋습니다 (문제가 귀하의 경우에 어떤 것인지 파악). ModelState.isValid를 확인하고 ModelState 위로 마우스를 가져 가면 바로 앞 / 위치에 배치하십시오. 이제 내부의 모든 값을 쉽게 찾아보고 어떤 오류가 isvalid가 false를 반환하는지 확인할 수 있습니다.

모델 상태


bool hasErrors =  ViewData.ModelState.Values.Any(x => x.Errors.Count > 1);

또는 반복

    foreach (ModelState state in ViewData.ModelState.Values.Where(x => x.Errors.Count > 0))
    {

    }

컨트롤러의 ActionResult에 아래 코드를 붙여넣고이 지점에 디버거를 배치합니다.

var errors = ModelState
    .Where(x => x.Value.Errors.Count > 0)
    .Select(x => new { x.Key, x.Value.Errors })
    .ToArray();

때때로 바인더에서 오류 메시지없이 예외가 발생합니다. 다음 스 니펫으로 예외를 검색하여 무엇이 잘못되었는지 찾을 수 있습니다.

(종종 바인더가 문자열을 복합 유형 등으로 변환하려는 경우)

 if (!ModelState.IsValid)
            {
var errors = ModelState.SelectMany(x => x.Value.Errors.Select(z => z.Exception));

// Breakpoint, Log or examine the list with Exceptions.

  }

ModelsState.IsValid에 대한 검사를 제거하고 오류가 발생하도록하는 경우이 줄을 복사 ((System.Data.Entity.Validation.DbEntityValidationException)$exception).EntityValidationErrors하여 Visual Studio의 감시 섹션에 붙여 넣으면 오류가 정확히 무엇인지 알려줍니다. 오류가있는 위치를 확인하는 데 많은 시간을 절약합니다.


컨트롤러의 ModelState 속성은 실제로 ModelStateDictionary 개체입니다. 사전의 키를 반복하고 IsValidField 메서드를 사용하여 특정 필드가 유효한지 확인할 수 있습니다.


나에게 일어난 것처럼-이것은 양식을 업데이트하지 않고 모델에 필수 속성을 추가 할 때도 발생할 수 있습니다. 이 경우 ValidationSummary는 오류 메시지를 나열하지 않습니다.

참고 URL : https://stackoverflow.com/questions/1791570/modelstate-isvalid-false-why

반응형