如何使用DataAnnotations库验证List <httppostedfilebase>?

时间:2016-04-15 10:20:36

标签: c# asp.net-mvc data-annotations

我使用自己的验证属性创建了ViewModel类,以检查上传的文件是否具有预期的扩展名(pdf,jpg):

public class TmpMyInvoiceDraftVM
    {
        public TmpMyInvoiceDraftVM()
        {
            this.AttachmentsInvoiceUploadedPartial = new List<HttpPostedFileBase>();
        }

        [Attachments]
        public HttpPostedFileBase AttachmentsInvoiceUploadedPartial { get; set; }

        [AttributeUsage(AttributeTargets.Property)]
        private sealed class AttachmentsAttribute : ValidationAttribute
        {
            protected override ValidationResult IsValid(object value,
              ValidationContext validationContext)
            {
                HttpPostedFileBase file = value as HttpPostedFileBase;

                if (file == null)
                {
                    return ValidationResult.Success;
                }

                string ext = Path.GetExtension(file.FileName).ToLower();

                if (String.IsNullOrEmpty(ext))
                {
                    return new ValidationResult("File has no extension");
                }
                if (!ext.Equals(".pdf", StringComparison.OrdinalIgnoreCase) &&
                    !ext.Equals(".jpg", StringComparison.OrdinalIgnoreCase))
                {
                    return new ValidationResult("Permitted formats: pdf,jpg");
                }
                return ValidationResult.Success;
            }
        }
    }

它工作正常。这个类代表我的asp.net mvc应用程序中的表单数据。现在我的任务是扩展ViewModel以验证不是一个文件而是几个文件 - &gt;

public List<HttpPostedFileBase> AttachmentsInvoiceUploadedPartial { get; set; } 

我不知道如何编写验证属性来检查所有附件。我甚至想知道是否可以创建这样的属性。有人可以告诉我如何构建这样的属性,或者如果不可能告诉我什么是更好的验证方法

List<HttpPostedFileBase> 

?   谢谢!

0 个答案:

没有答案