Сохраняющиеся данные формы в представлении после записи загрузки файла из того же представления

#asp.net-mvc-2 #file-upload

#asp.net-mvc-2 #загрузка файла

Вопрос:

У меня есть возможность отредактировать некоторые детали документа и загрузить два связанных изображения. Я хочу, чтобы это представление выполняло два разных действия на моем контроллере: одно для сохранения всех полей формы и одно для загрузки файла. У меня есть одна форма вокруг основной формы и составная форма вокруг ввода файла uplaod

    <% using (Html.BeginForm("Edit", "Document", FormMethod.Post,
                                 new { enctype = "multipart/form-data" })) { %>

    <% =Html.TextBoxFor(model => model.Document.Title) %>
     <%= Html.TextBoxFor(model => model.Document.Description) %>

    //and then another multipart form around the file upload part like this
     <% using(Html.BeginForm("FileUpload", "Document", FormMethod.Post, new { enctype = "multipart/form-data" }))
                <input type="file" id="fileUpload" name="iamge" size="30" />
                <input type="submit" value="Upload" />
                  <% { %>  

<input type="submit" value="Save" />
<% } %>
  

Загрузка файла происходит корректно при публикации внутренней формы, но я хочу, чтобы контроллер снова вернул готовую модель в основное представление со всеми сохраненными полями формы. Представление строго типизировано, поэтому я подумал, что отправлю всю модель в действие загрузки файла, используя внутреннюю форму. Могу ли я обойтись без наличия только одной составной формы, которая будет размещать файлы и данные формы независимо от того, какой элемент ввода нажат? Это хорошая практика. В конце дня все, что я хочу, это убедиться, что все данные моей формы сохраняются в форме редактирования после загрузки моего файла.

Как я могу передать данные модели в действие загрузки файла из внутренней формы?

Ответ №1:

Я не думаю, что вам нужна внутренняя форма. У вас может быть просто внешняя форма, которая должна анализироваться в вашей модели, если вы настроили аргументы действия. Тогда у вас мог бы быть другой логический путь с точки зрения, например, сохранения других элементов модели в зависимости от того, были ли опубликованы какие-либо файлы.

Затем вы смогли бы передать модель, которая была опубликована обратно, обратно в представление.

Комментарии:

1. При использовании только одной формы, я думаю, моя проблема в том, что я использую две кнопки отправки, чтобы опубликовать одну форму для двух действий. Возможно, в этом случае мне следует использовать ActionLink .

2. Конечно, это зависит от вашей реализации, но я бы посоветовал вам использовать одно и то же действие и направлять свою логику в зависимости от того, был ли файл выбран / загружен или нет…

3. Мне удалось заставить его работать, обработав все с помощью одного действия с одной формой, как вы предложили. Приветствия @Badger