2012-08-28 3 views
2

나는 나의 MVC 3 웹 응용 프로그램에서 파일 업로드 기능을하고 난 파일 크기를 확인하기 위해 노력하고있어 및되는 파일 형식 이러한 속성 사용 :MVC 3 파일 업로드 검증 화재 잘못

[FileSize(1048576, ErrorMessage = "The image is too big. It should be up to 1MB")] 
[FileType(MimeTypes.Image.Jpg, MimeTypes.Image.Jpeg, MimeTypes.Image.Png, "image/pjpeg", "image/x-png", ErrorMessage = "Your image must be a JPG/JPEG or PNG up to 1MB.")] 
public HttpPostedFileBase File { get; set; } 

HTML은 다음과 같다 :

를 파일을 선택하면
<input type="file" size="20" name="File" /> 
@Html.ValidationMessageFor(x => x.File) 

모든 것이 완벽하게 작동합니다. 그러나 선택된 파일이 없으면 FileSize 또는 FileType 유효성 검사가 실행되고 유효성 검사 오류가 발생합니다. POST에서 File을 필요로하지 않으므로 어떻게 피할 수 있습니까? 당신은 FileSizeFileType 지정 유효성 검사를 수정해야합니다

답변

4

은 값이 null의 경우 유효성 검사를 수행하지 않도록 속성. 예를 들면 :

public class FileSizeAttribute : ValidationAttribute 
{ 
    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     if (value == null) 
     { 
      // don't validate if value is null 
      return null; 
     } 

     // TODO: do whatever validation you were supposed to do 
     ... 
    } 
} 

그리고 당신이 필요로하는 파일을 만들 수있는 [Required] 속성을 통해입니다.

+0

는 값이 (원래 구현에서 복사 붙여 넣기 그것을 제외) null가 아닌 경우, 나는 기본 FileSizeAttribute 유효성 검사를 수행 할 수있는 방법이 있습니까? –

+0

질문을 이해할 수 없습니다. –

+0

위에서 언급 한 것처럼 FileSizeAttribute의 IsValid 메서드를 재정의하면 나머지 유효성 검사 코드를 수동으로 작성해야합니다 (값이 null이 아닌 경우 예제의 TODO 부분). FileSizeAttribute와 똑같은 일을 할 수있는 방법이 있습니까? 내 말은, 값이 null 일 때도 동일한 기능 + 무시가 필요합니다. –