Я создаю многошаговый процесс в стиле мастера в веб-приложении ASP.NET MVC 4. Я использую TempData для зависания информации с предыдущих шагов, потому что мастер не является строго линейным - выбор пользователя на первой странице фактически приводит к тому, что они видят один из трех вариантов для третьей страницы. Я достигаю этого, используя свой выбор, чтобы присвоить одному из трех производных классов свойству базового класса на viewmodel для этой третьей страницы. Затем сама страница использует настраиваемое связующее устройство, которое позволяет мне использовать @Html.EditorFor(m => m.BaseContainer)
и отображать на нем правильный шаблон для заполнения пользователем. Моя проблема заключается в том, что при обращении к третьей странице, метод контроллера, конечно, class object, что означает, что когда я сохраняю его в TempData, он сохраняет только свойства базового класса.Передача производного класса через свойство базового класса на контроллере
Я мог бы сделать серию проверок вдоль линий if (viewModel.BaseContainer is DerivedClass1)
, но это похоже на взлома. Весь смысл абстракции в использовании базового класса заключается в том, что контроллеру не нужно знать, какой он находится в этой точке. Есть ли более элегантный способ сохранить объект, не теряя свойства производного класса?
У вас есть код, который поможет вашему описанию – CR41G14