2012-12-21 6 views
1

에서 <입력 유형 = '파일'> 제외 내가 가지고있는 "만들기"보기에서 다음 파일 입력 태그 :는 뷰 모델

[Required(ErrorMessage="Please select a file")] 
public HttpPostedFileBase RequestFile { get; set; } 

이 :

<input type="file" id="RequestFile" name="RequestFile"/> 
@Html.ValidationMessage("RequestFile") 

뷰 모델이 해당 속성이 포함 "만들기"보기에서 제대로 작동하지만 "편집"보기에서는 ModelState.Isvalid가 false로 표시됩니다. 동일한 ViewModel을 사용하여 파일을 다시 업로드하고 싶지 않기 때문에 유효성 검사에서이 필드를 제외하고 싶습니다.

은 단순히 다음과 같이 입력 태그를 비활성화 시도 :

<input type="file" id="RequestFile" name="RequestFile" disabled/>    

이 비활성화 입력 컨트롤을 가지고 있지만 유효성 검사는 여전히졌습니다.

또한 서버 측 솔루션이에있는 경우, 의견을 게시하시기 바랍니다, (나는 그것이 가능성 소리로 들리 겠지만) 이상적 ( see this Question)

를 작동하지 않았다 컨트롤러에서 BindAttribute을 적용. 작은 클라이언트 측 트릭이 있다면 알려주십시오!

+1

'ModelState.Remove ("RequestFile")의 클릭 이벤트 넣어;'? – cheesemacfly

+0

@cheesemacfly 감사합니다! 그 작품. – Faredoon

답변

2

가장 좋은 방법은 속성을 모두 제거하고 항상 양식 컬렉션에서 직접 액세스하고 수동으로 유효성을 검사하거나 속성 이름을 사용하여 모델 상태 오류를 수동으로 제거하는 것입니다 (@cheesemacfly가 그의 설명에 ModelState.Remove("RequestFile")에 있음) . 후자의 경우 매우 쉽게 수정할 수 있습니다.

+0

감사합니다. FormCollection 메서드도 작동해야합니다. 이 경우 모델 바인딩을 무시할 것입니다. – Faredoon

0

form.onsubmit을 사용하여 확인하십시오. document.getElementById ("RequestFile"). value가 null/empty가 아니며 제출 된 경우 제출을 취소하십시오.

뭔가

<form onsubmit="if(!document.getElementById('RequestFile').value){alert('Please select a file.');return false;}" > 
<input type="file" id="RequestFile" name="RequestFile" /> 
<input type="submit"/> 
</form> 

등의 반환 거짓 제출을 취소합니다.

http://jsfiddle.net/Cg7HY/1/

되거나 제출 버튼 자체

http://jsfiddle.net/Cg7HY/3/

+0

"편집"보기에서 빈 파일이있는 양식을 제출하고 싶습니다. 이 경우 현장을 무시할 수 있는지 알고 싶었습니다. – Faredoon