在asp.net mvc中处理文件上传的最佳方法是什么?

时间:2011-02-11 00:01:44

标签: asp.net-mvc-3

我无法将asp.net MVC 3应用程序绑定到包含上传文件的类。

这是我的班级:

public class PhotoAndCaption : IValidatableObject
{
    [Required]
    public HttpPostedFile ImageFile { get; set; }

    [Required]
    public string Caption { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        //make sure ImageFile is jpg image of proper size.
        yield return new ValidationResult("This shit ain't right!!!!");
    }
}

以下是观点:

@using(Html.BeginForm("UploadImage", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<p><input type="file" id="ImageFile" name="ImageFile" /></p>
<p>@Html.TextBoxFor(m => m.Caption)</p>
<p></p>
 <input type="submit" value="Upload File" />
}

Caption正确绑定但ImageFile没有绑定。我想将它绑定到一个实现IValidatableObject的类,这样我就可以整齐地验证上传的图像,以确保它是正确的像素尺寸等。如果没有,我想回复一个有意义的错误消息。理想情况下,我想在一个地方对该课程进行所有验证,因此我可以检查标题以及稍后可能在一个地方添加的任何其他字段。

当我测试这个时,我的Caption属性绑定正确,但ImageFile没有。

2 个答案:

答案 0 :(得分:4)

  

我们必须使用HttpPostedFileBase类,而不是   HttpPostedFile因为每个Request,Response,HttpContext等等   相关的ASP.NET内在抽象是一个更远的方法   ASP.NET MVC

这是Scott Hanselman的MVC file upload example解释,为什么我们必须在MVC中使用HttpPostedFileBase而不是HttpPostedFile。

答案 1 :(得分:2)

我将ImageFile属性从HttpPostedFile更改为HttpPostedFileBase,现在可以正常工作。