c# - 如何使用数据注释验证 IEnumerable<HttpPostedFiles>

标签 c# asp.net-mvc validation

我关注了这个tutorialHttpPostedFileBase 上创建验证,如果我使用 HttpPostedFileBase 就可以了,但如果我改为 IEnumerable<HttpPostedFileBase>如需上传多个文件,请提交表单ModelState.IsValid总是假的。我上传了 .png 文件,大小为 914 字节。如何使用数据标注来验证多个文件上传?

我的模型

public class BillingViewModel
{
     [Required]
     public long BillingID { get; set; }    
     public IEnumerable<TimeKeeper> TimeKeepers { get; set; }    
     [Required]
     [ValidateFile]
     public IEnumerable<HttpPostedFileBase> PostedFiles { get; set; }
}

验证文件.cs:

public class ValidateFileAttribute : ValidationAttribute
    {
        public override bool IsValid(object value)
        {
            int MaxContentLength = 1024 * 1024 * 3; //3 MB
            string[] AllowedFileExtensions = new string[] { ".jpg", ".gif", ".png", ".pdf" };
            var file = value as HttpPostedFileBase;

            if (file == null)
            {
                return false;
            }
            else if (!AllowedFileExtensions.Contains(file.FileName.Substring(file.FileName.LastIndexOf('.'))))
            {
                ErrorMessage = "Please upload Your Photo of type: " + string.Join(", ", AllowedFileExtensions);
                return false;
            }
            else if (file.ContentLength > MaxContentLength)
            {
                ErrorMessage = "Your Photo is too large, maximum allowed size is : " + (MaxContentLength / 1024).ToString() + "MB";
                return false;
            }
            else
            {
                return true;
            }
        }
    }

最佳答案

您似乎将该属性转换为错误的类型。

更改此:

var file = value as HttpPostedFileBase;

至:

var files = value as IEnumerable<HttpPostedFileBase>;

然后您可以迭代集合中的每个项目并验证每个文件的大小是否正确。

关于c# - 如何使用数据注释验证 IEnumerable<HttpPostedFiles>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23607480/

相关文章:

c# - 如何使用 ThreadPool 并行化数据库查询?

jquery - ASP.NET MVC 验证属性和 Jquery

c# - 我应该将文件复制到多大的 block 中?

c# - params 是否可用于通过使用 yield 的函数通过 ref 传递变量

c# - @Html.ValidationMessageFor 没有按预期工作

c# - 如何在 ASP.NET 中运行后台任务

javascript - 如何使用一个 Controller 方法返回 FileResult 和 View

ruby-on-rails-3 - 将单个附件用于回形针中的视频/图像

html - 正则表达式 - 查找具有 name 属性但不具有 id 的元素

c# - 使用 MarshalAs 和 StructLayout 读取二进制数据