我正在ASP.NET MVC 4 Web应用程序中构建向导式多步骤过程。我正在使用TempData来挂起前面步骤中的信息,因为向导不是严格线性的 - 用户在第一页上的选择实际上导致他们看到第三页的三个选项之一。我通过使用他们的选择将三个派生类中的一个分配给该第三页的viewmodel上的基类属性来实现此目的。页面本身然后使用自定义模型绑定器允许我使用@Html.EditorFor(m => m.BaseContainer)
并让它显示正确的模板供用户填写。我的问题是当第三页POST回来时,控制器方法当然是期望一个基类对象,这意味着当我将它保存在TempData中时,它只保存基类属性。
我可以按if (viewModel.BaseContainer is DerivedClass1)
的方式进行一系列检查,但这似乎是一个黑客攻击。使用基类的抽象的全部要点是控制器此时不需要知道它是哪一个。是否有更优雅的方法来保存对象而不会丢失派生类的属性?
答案 0 :(得分:0)
TempData
中,并继续进行下一步。
如果您在从基类派生时添加新属性,那么您将扩展其接口,您可以为每个派生类中的新属性创建额外的接口,但这听起来不像是一个简单的解决方案。