Как довольно опытный разработчик ASP.Net, который недавно начал использовать MVC, я немного пытаюсь изменить свое мышление с помощью традиционного метода "управления сервером и обработчиком событий", в более динамичный способ MVC, Я думаю, что я медленно добираюсь туда, но иногда MVC "магия" отбрасывает меня.
Мой текущий сценарий - создать веб-страницу, которая позволяет пользователю просматривать локальный файл, загружать его на сервер и повторять это, пока у него не будет списка файлов для работы. Когда он доволен списком файлов (который будет отображаться в сетке на странице), он нажмет кнопку, чтобы обработать файлы и извлечь некоторые данные, которые будут храниться в базе данных.
Последняя часть не так важна, сейчас я борюсь с чем-то таким же тривиальным, как создание списка файлов и сохранение этого списка между запросами. В традиционном подходе это было бы чрезвычайно просто - данные сохранялись бы в ViewState. Но в MVC мне нужно передать данные между контроллером и представлениями, и я не полностью понимаю, как это должно работать.
Думаю, я лучше опубликую свою довольно неполную попытку кодирования этого, чтобы объяснить проблему.
Чтобы сохранить данные списка файлов, я создал модель представления, которая представляет собой типизированный список файлов, а также некоторые дополнительные метаданные:
public class ImportDataViewModel
{
    public ImportDataViewModel()
    {
        Files = new List<ImportDataFile>();
    }
    public List<ImportDataFile> Files { get; set; }
...
В представлении у меня есть форма для просмотра и загрузки файла:
<form action="AddImportFile" method="post" enctype="multipart/form-data">
  <label for="file">
    Filename:</label>
  <input type="file" name="file" id="file" />
  <input type="submit" />
  </form>
В представлении используется модель viewmodel в качестве ее модели:
@model MHP.ViewModels.ImportDataViewModel
Это отправит файл в мое действие:
public ActionResult AddImportFile(HttpPostedFileBase file, ImportDataViewModel importData)
    {
        if (file.ContentLength > 0)
        {
            ImportDataFile idFile = new ImportDataFile { File = file };
            importData.Files.Add(idFile);
        }
        return View("DataImport", importData);
    }
Это действие возвращает представление для страницы DataImport вместе с экземпляром viewmodel, содержащим список файлов.
Это хорошо работает до определенного момента, я могу просматривать файл и загружать его, и я могу видеть данные viewmodel внутри действия, а затем также, если я помещаю точку останова в представление и отлаживаю "this.Model", все в порядке.
Но тогда, если я попытаюсь загрузить другой файл, при установке точки останова внутри действия AddImportFile параметр importData пуст. Таким образом, представление, очевидно, не передает текущий экземпляр своей модели для действия.
В образцах MVC, с которыми я прошел, экземпляр модели "магически" передается методу действия в качестве параметра, поэтому почему он теперь пуст?
Я предполагаю, что реальной проблемой является мое ограниченное понимание MVC и что, вероятно, это очень простое решение. В любом случае, я был бы чрезвычайно благодарен, если бы кто-нибудь мог указать мне в правильном направлении.