Ваша форма не содержит никакого входного тега, кроме файла, поэтому в вашем действии контроллера вы не можете ожидать получить что-либо кроме загруженного файла (это все, что отправляется на сервер). Одним из способов достижения этого было бы включение скрытого тега, содержащего идентификатор модели, который позволит вам извлечь его из хранилища данных внутри действия контроллера, на которое вы отправляете сообщение (используйте его, если пользователь не должен изменять модель, но просто прикрепите файл):
@using (Html.BeginForm("Uploadfile", "Containers", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.HiddenFor(x => x.Id)
<input type="file" name="file" id="file" />
<input type="submit" value="submit" />
}
и затем в действии вашего контроллера:
[HttpPost]
public ActionResult Uploadfile(int id, HttpPostedFileBase file)
{
Containers containers = Repository.GetContainers(id);
...
}
С другой стороны, если вы хотите разрешить пользователю изменять эту модель, вам нужно будет включить соответствующие поля ввода для каждого поля вашей модели, которое вы хотите отправить на сервер:
@using (Html.BeginForm("Uploadfile", "Containers", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.TextBoxFor(x => x.Prop1)
@Html.TextBoxFor(x => x.Prop2)
@Html.TextBoxFor(x => x.Prop3)
<input type="file" name="file" id="file" />
<input type="submit" value="submit" />
}
и тогда у вас будет механизм связывания моделей по умолчанию, который реконструирует эту модель из запроса:
[HttpPost]
public ActionResult Uploadfile(Container containers, HttpPostedFileBase file)
{
...
}