[asp.net-mvc-3] MVC3 ModelState 오류 제거

사용자가 로컬 파일 시스템에서 선택한 이미지를 업로드하는 상황이 있습니다. 내보기의 내 양식에는 기본적으로 두 개의 제출 버튼이 있습니다. 하나는 양식을 정상적으로 제출하는 데 사용되며 모든 유효성 검사가 실행됩니다. 두 번째는 이미지 업로드 전용이며,이 경우 아직 유효성을 검사하고 싶지 않습니다.

‘이미지 업로드’제출 버튼에 “style-name cancel”클래스 값을 제공하여 클라이언트 측 유효성 검사를 해제했습니다.

<input type="submit" name="UploadImageButton" value="Upload Image" class="style-name cancel" />

이제 다시 게시 할 때 모델에 UploadImageButton 속성이 있고이 버튼을 클릭하면이 속성이 채워집니다 (입력 이름이 속성과 일치 함). 이렇게하면 양식이 실제 제출 단추 또는 UploadImageButton에 의해 제출되었는지 알 수 있습니다.

내 질문은 이것이 … ServerSide 유효성 검사를 어떻게 해제 할 수 있습니까? 사용자가이 버튼을 클릭 할 때 유효성 검사 요약 정보가 표시되는 것을 원하지 않습니다. 이것을 사용하여 커스텀 모델 오류를 추가 할 수 있다는 것을 알고 있습니다.

ModelState.AddModelError("{key}", "{error msg}");

모델 오류를 제거하는 방법을 찾고 있습니다. 이것이 가능한가?

편집하다:

내가 생각해 낸 것은 다음과 같습니다.

foreach (var key in ModelState.Keys.ToList().Where(key => ModelState.ContainsKey(key))) {
     //ModelState.Remove(key); //This was my solution before
     ModelState[key].Errors.Clear(); //This is my new solution. Thanks bbak
}



답변

다음과 같이 수행하여 모델 오류를 제거 할 수 있습니다.

if (ModelState.ContainsKey("{key}"))
    ModelState["{key}"].Errors.Clear();


답변

이것은 이전 답변을 구축하지만 조금 더 단순화합니다.

foreach (var modelValue in ModelState.Values)
{
    modelValue.Errors.Clear();
}


답변

일반적으로 서버 측 유효성 검사를 끄거나 ModelState 오류를 수동으로 제거하지 않으려 고합니다. 가능하지만 문자열을 키로 사용해야하기 때문에 오류가 발생하기 쉽습니다. 정확하고 유용하기 때문에 키를 제거하는 방법에 대한 답변을 찬성했지만 강력하게 고려해야하는 경우에 자신을 디자인하지 않는 것이 좋습니다.

귀하의 경우 동일한 양식에 대해 여러 제출 버튼이 있지만 실제로 이미지를 업로드 할 때 양식을 제출하지 않습니다. 클라이언트 측 유효성 검사를 방지하려면 이미 표시 한대로 “취소”클래스를 사용할 수 있지만 두 번째 제출 버튼을 다른 양식에 두는 것이 좋습니다.이 경우 기본 양식에 대한 유효성 검사가 발생하지 않습니다.

다른 형식을 사용하는 두 번째 이점이 있습니다. 이미지를 업로드하는 논리를 처리하는 다른 ActionResult 메서드로 보낼 수 있습니다. 이 다른 방법은 단순히 모델 상태의 “IsValid”속성을 확인하는 데 신경 쓰지 않습니다. 이미지에 정보가 있는지 여부 만 신경 쓰고 별도로 확인할 수 있습니다. (동일한 ActionResult 메서드를 사용하더라도 모델 상태의 IsValid 속성에 의존하지 않도록 논리를 퍼널 할 수 있습니다.)

모델 상태에서 오류를 지워야하고 모두 지워야하는 경우 다음을 시도하십시오.

foreach (var key in ModelState.Keys)
{
    ModelState[key].Errors.Clear();
}

이렇게하면 키 이름을 올바르게 가져 오는 데 의존하지 않지만 모델에 이미 값 (유효 또는 유효하지 않음)이있는 경우 값이 유지됩니다.

이 경우 마지막으로 확인해야 할 사항은 뷰에 가끔 만있는 값이 있는지 여부입니다.이 값은 클라이언트 측 유효성 검사를 일으키지 않지만 (보기에는 없음) 서버 측 유효성 검사 문제를 발생시킵니다. 이 경우 @ Html.HiddenFor (model => model.PropertyName을 사용하는 것이 가장 좋습니다. 가능한 경우 값이 이미 설정되었다고 가정하면이보기에 표시되지 않습니다.


답변

가끔 사용하기 때문에 확장 방법을 만들었습니다.

public static ModelStateDictionary ClearError(this ModelStateDictionary m, string fieldName)
{
    if (m.ContainsKey(fieldName))
        m[fieldName].Errors.Clear();
    return m;
}

여러 필드의 오류를 제거하는 데 유창하게 사용할 수 있습니다.


답변

ModelState.Remove ( “{key}”)를 사용하여 model에서 오류를 제거하면 ModelState.IsValid가 true로 재설정됩니다.

ModelState.Remove("{key}");


답변