Image 使用IValidatableObject验证上载的文件

Image 使用IValidatableObject验证上载的文件,image,validation,model,upload,ivalidatableobject,Image,Validation,Model,Upload,Ivalidatableobject,大家好! 我在模型验证方面有点不在行,我一直在尝试使用IValidatableObject接口验证一个Articles对象和一个上传的文件,但没有成功。 下面这个类很好地验证了Articles对象,但是我看不到如何注入HttpPostedFileBase来允许我针对它进行验证。使用这种方法是否可以实现这一点? 我用来提交数据的表单包含enctype=multipart/formdata属性,因此它知道它的发布文件。 这是我试图验证的完整类。这真的让我陷入困境,任何帮助都将非常感激。 p


大家好!

我在模型验证方面有点不在行,我一直在尝试使用IValidatableObject接口验证一个Articles对象和一个上传的文件,但没有成功。

下面这个类很好地验证了Articles对象,但是我看不到如何注入HttpPostedFileBase来允许我针对它进行验证。使用这种方法是否可以实现这一点?

我用来提交数据的表单包含enctype=multipart/formdata属性,因此它知道它的发布文件。

这是我试图验证的完整类。这真的让我陷入困境,任何帮助都将非常感激。

public class ArticlesModel : IValidatableObject
{
    public Article Article { get; set; }
    public IEnumerable<Category> Categories { get; set; }
    public HttpPostedFileBase PostedFile { get; set; }

    public ArticlesModel(){}

    public ArticlesModel(Article article, IEnumerable<Category> categories)
    {
        this.Article = article;
        this.Categories = categories;
    }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (Article.CategoryID == 0)
        {
            yield return new ValidationResult("Please select a category.", new[] { "Article.Category"});
        }

        if (Article.Title == null)
        {
            yield return new ValidationResult("Please enter a title.", new[] { "Article.Title" });
        }

        if (Article.Content == null)
        {
            yield return new ValidationResult("Please enter some content.", new[] { "Article.Content" });
        }


        if (PostedFile == null)
        {
            yield return new ValidationResult("Please upload a file.", new[] { "Article.ImageFile" });
        }
        else
        {
            if (PostedFile.ContentLength > 1 * 1024 * 1024)
            {
                yield return new ValidationResult("Please upload a file 1Mb or less.", new[] { "Article.ImageFile" });
            }

            //Other file checking logic here please!!
        }
    }
}
公共类ArticlesModel:IValidatableObject
{
公共物品文章{get;set;}
公共IEnumerable类别{get;set;}
公共HttpPostedFileBase PostedFile{get;set;}
公共物品模型(){}
公共物品模型(物品,IEnumerable类别)
{
本条=第条;
这个。类别=类别;
}
公共IEnumerable验证(ValidationContext ValidationContext)
{
如果(Article.CategoryID==0)
{
返回新的ValidationResult(“请选择一个类别。”,new[]{“Article.category”});
}
if(Article.Title==null)
{
返回新的ValidationResult(“请输入标题。”,新[]{“Article.title”});
}
if(Article.Content==null)
{
返回新的ValidationResult(“请输入一些内容。”,new[]{“Article.content”});
}
if(PostedFile==null)
{
返回新的ValidationResult(“请上传一个文件。”,new[]{“Article.ImageFile”});
}
其他的
{
如果(PostedFile.ContentLength>1*1024*1024)
{
返回新的ValidationResult(“请上传1Mb或更少的文件。”,new[]{“Article.ImageFile”});
}
//其他文件检查逻辑请在这里!!
}
}
}