2015-09-26 3 views
0

У меня есть представление, которое принимает файлы. Причиной этого является то, что пользователи могут загружать изображения. Обычно, когда я делаю это, у меня будет вход для файла, а затем отправляйте файл обратно на мой контроллер, где я могу его преобразовать и использовать.Как добавить список файлов в ViewModel

Однако в этом конкретном представлении есть несколько файлов и неизвестное количество файлов для загрузки. Поэтому я не могу просто отправить файл обратно на мой контроллер. Я думал, что создам ViewModel, и в ViewModel будет список файлов, которые будут хранить добавленные файлы. Затем я отправлю ViewModel обратно и собрал список файлов.

Моя проблема заключается в том, что я не знаю, как добавить файлы в свою ViewModel после того, как пользователь их загрузит. Обычно для текста я бы использовал что-то вроде редактора, но я не уверен, есть ли такая вещь, как fileuploadfor.

Я предполагаю, что могу изменить свой текущий метод ввода файла, а затем назначить его в свою ViewModel, но я не знаю, как это сделать.

Мой текущий метод получения файла:

<input type="file" name="file" /> 

Я хотел бы добавить, что файл в список Model.InputFiles. Model.InputFiles - это список типов HttpPostedFile

ответ

1

Просто вы можете сделать шаблон редактора для HttpPostedFileBase и использовать его в своем представлении. Для этого сначала в Views\Shared\EditorTemplates папке создать файл с именем HttpPostedFileBase.cshtml с следующим содержанием:

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue.ToString(),new{type="file"}) 

Теперь рассмотрим вашу модель представления, как это:

public class MyViewModel 
{ 
    public HttpPostedFileBase[] InputFiles { get; set; } 
    // other properties 
} 

И ваш метод действий может быть такой:

public ActionResult MyAction() 
{ 
    // a simple example 
    return View(new MyViewModel{ InputFiles = new InputFiles[10] }); 
} 

[HttpPost] 
public ActionResult MyAction(MyViewModel model) 
{ 
    var myFile=model.InputFiles[0]; 
} 

В прошлом вы могли легко использовать EditorFor() метод:

@using (Html.BeginForm("MyAction", "MyController", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    // name your variable same as your collection name to model binder bind it to your collation 
    @foreach (var InputFiles Model.InputFiles) 
    { 
     @Html.EditorFor(m => InputFiles) 
    } 
} 
Смежные вопросы