Je crée un processus en plusieurs étapes de type Assistant dans une application Web ASP.NET MVC 4. J'utilise TempData pour conserver les informations des étapes précédentes, car l'assistant n'est pas strictement linéaire: les choix de l'utilisateur sur la première page lui permettent de voir l'une des trois options de la troisième page. J'y parviens en utilisant leur choix pour affecter l'une des trois classes dérivées à une propriété de classe de base sur le viewmodel de cette troisième page. La page elle-même utilise ensuite un classeur de modèle personnalisé pour me permettre d'utiliser @Html.EditorFor(m => m.BaseContainer)
et le faire afficher le bon modèle pour l'utilisateur à remplir. Mon problème est que lorsque la troisième page POST, la méthode de contrôleur attend bien sûr une base- objet de classe, ce qui signifie que lorsque je l'enregistre dans TempData, il enregistre uniquement les propriétés de la classe de base.Passage de la classe dérivée autour de la propriété de classe de base sur le contrôleur
Je pourrais faire une série de vérifications le long des lignes de if (viewModel.BaseContainer is DerivedClass1)
, mais cela semble être un hack. Le point entier de l'abstraction dans l'utilisation de la classe de base est que le contrôleur n'a pas besoin de savoir lequel il est à ce stade. Existe-t-il un moyen plus élégant de sauvegarder l'objet sans perdre les propriétés de la classe dérivée?
Avez-vous un code pour aider votre description? – CR41G14