我正在一个 ASP.NET MVC 4 Web 应用程序中构建一个向导式的多步骤过程。我使用 TempData 来保留前面步骤中的信息,因为向导不是严格线性的——用户在第一页上的选择实际上导致他们看到第三页的三个选项之一。我通过使用他们的选择将三个派生类之一分配给第三页的视图模型上的基类属性来实现这一点。然后页面本身使用自定义模型绑定器允许我使用@Html.EditorFor(m => m.BaseContainer)
并让它显示正确的模板供用户填写。我的问题是当第三页返回时,控制器方法当然需要一个基类对象,这意味着当我将它保存在 TempData 中时,它只保存基类属性。
我可以按照以下方式进行一系列检查if (viewModel.BaseContainer is DerivedClass1)
,但这似乎是一种黑客行为。使用基类的整个抽象点是控制器不需要知道此时它是哪一个。有没有更优雅的方法来保存对象而不丢失派生类的属性?