有没有办法让发布的文件 ( <input type="file" />
) 参与 ASP.NET MVC 中的模型绑定,而无需手动查看自定义模型绑定器中的请求上下文,也无需创建仅将发布的文件作为输入的单独操作方法?
我原以为这会起作用:
class MyModel {
public HttpPostedFileBase MyFile { get; set; }
public int? OtherProperty { get; set; }
}
<form enctype="multipart/form-data">
<input type="file" name="MyFile" />
<input type="text" name="OtherProperty" />
</form>
public ActionResult Create(MyModel myModel) { ... }
但考虑到上述情况,MyFile
它甚至不是绑定上下文中值提供者值的一部分。(OtherProperty
当然是。)但如果我这样做,它会起作用:
public ActionResult Create(HttpPostedFileBase postedFile, ...) { ... }
那么,为什么当参数是模型时没有发生绑定,我怎样才能让它工作呢?我对使用自定义模型绑定器没有任何问题,但是如何在自定义模型绑定器中执行此操作而不查看Request.Files["MyFile"]
?
为了一致性、清晰性和可测试性,我希望我的代码能够自动绑定模型上的所有属性,包括绑定到已发布文件的属性,而无需手动检查请求上下文。我目前正在使用Scott Hanselman 所写的方法测试模型绑定。
还是我以错误的方式解决这个问题?你会如何解决这个问题?或者由于 Request.Form 和 Request.Files 之间的分离历史,这是设计上不可能的?