Есть ли способ опубликовать файлы (<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?