我无法将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没有。
答案 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,现在可以正常工作。