2012-08-28 55 views
2

我有一個文件上傳功能在我的MVC 3 web應用程序,我試圖驗證文件大小和文件類型使用這些屬性: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上需要文件?

回答

4

您必須修改FileSizeFileType自定義驗證屬性,以便在值爲空時不執行任何驗證。例如:

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

有沒有什麼辦法可以執行默認的FileSizeAttribute驗證如果值不爲空(沒有複製粘貼它從原始實現)? –

+0

我不明白你的問題。 –

+0

如果我像您提到的那樣從FileSizeAttribute覆蓋IsValid方法,則必須手動編寫其餘的驗證代碼(如果值不爲null,則爲示例中的TODO部分)。有什麼辦法可以讓它做FileSizeAttribute完全一樣的事情嗎?我的意思是,我需要相同的功能+當值爲空時忽略。 –