2009-11-24 9 views

답변

31

"는 0 오류 및 IsValid == 거짓이 있다고 할 수있다"는 될 수 없다처럼 이제 https://github.com/Microsoft/referencesource/blob/master/System.Web/ModelBinding/ModelStateDictionary.cs#L37-L41

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

에서 여기 MVC 소스 코드, 그것은 보인다. ASP.NET MVC v1 용입니다.

+0

그것은 나에게 그것은, 그것은 무언가 잘못 Values.All 것 같습니다 (modelState => modelState.Errors.Count == 0)? – Omu

+0

오류는 메시지 또는 예외 일 수 있습니다. 예를 들어 Html.ValidationSummary는 예외를 표시하지 않습니다 (보안상의 이유로). 어쩌면 그게 왜 당신이 실수를 보지 못했을까요? 오류가 없는지 어떻게 확인합니까? – queen3

+1

ModelState.IsValid는 거짓을 말합니다 – Omu

2

컨트롤러의 ModelState 속성은 실제로 ModelStateDictionary 개체입니다. 사전의 키를 반복하고 IsValidField 메서드를 사용하여 특정 필드가 유효한지 확인할 수 있습니다. 당신은 아마 당신이 더 문제가 무엇인지 생각을 (예 : 쉽게 디버깅 단계를 중단 점을 사용하여 얻을 수있는 가능성을 활용할 것 Visual Studio에서 프로그래밍되기 때문에

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

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

또는 반복 귀하의 경우처럼). ModelState.isValid를 확인하고 ModelState 위로 마우스를 올리면됩니다. 이제 내부의 모든 값을 쉽게 탐색하고 isvalid가 false를 반환하는 원인을 확인할 수 있습니다. 약

modelstate

+0

모든 값에 0 오류가 있고 모델 상태가 여전히 유효하지 않을 수 있습니까? – Omu

+1

modelstate에는 키 "Property"와 관련 오류가 사전에 있습니다. 오류 메시지는 공백 일 수 있지만 오류 계수는 올바르지 않은 특성 계수를 반영합니다. ModelStateDictionary.AddModelError 메서드는 키를 가져오고 Exception 또는 error String을 사용하기 때문에; 모델 오류를 추가해야합니다. –

195

+3

모든 값에 0 오류가 있고 modelstate가 여전히 유효하지 않을 수도 있습니까? 위에 언급 한 바와 같이 – Omu

+0

과 같은 것은 가능하지 않습니다. 어딘가에 오류 개수가 있어야합니다! = 0. – bastijn

+0

이 설명은 많은 도움이되었습니다. 감사! – Branislav

10

때때로 바인더가 오류 메시지없이 예외를 throw합니다. 당신은 찾아 다음 코드로 예외를 검색 할 수 있습니다 무슨 잘못 :

내게 일어난 단지 것처럼

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

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

    } 
+0

이 코드는 나에게 매우 도움이되었지만 각각의 .Message가 "개체 참조가 개체의 인스턴스로 설정되지 않은"결과를 가져 오기 위해 오류 (예외)를 반복합니다. z.Exception을 z.ErrorMessage로 변경하면 오류 메시지를 표시 할 수있었습니다. – StackOverflowUser

0

(바인더는 복합 형 등으로 문자열을 변환하려고 종종 경우) -이 양식을 업데이트하지 않고도 필요한 속성을 모델에 추가 할 때도 발생할 수 있습니다. 이 경우 ValidationSummary는 오류 메시지를 나열하지 않습니다.

4
컨트롤러의 ActionResult에 아래 코드를 붙여넣고이 시점에 디버거를 배치하십시오.
var errors = ModelState 
    .Where(x => x.Value.Errors.Count > 0) 
    .Select(x => new { x.Key, x.Value.Errors }) 
    .ToArray(); 
관련 문제