Есть ли способ получить опубликованные файлы (<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"]
?
Для согласованности, ясности и тестируемости я хотел бы, чтобы мой код обеспечивал автоматическое связывание всех свойств модели, в том числе привязанных к опубликованным файлам, без ручной проверки контекста запроса. В настоящее время я тестирую привязку модели, используя подход, который Скотт Хансельман написал о .
Или я поступаю неправильно? Как бы вы решили это? Или это не возможно по замыслу из-за истории разделения между Request.Form и Request.Files?