0

我正在一个 ASP.NET MVC 4 Web 应用程序中构建一个向导式的多步骤过程。我使用 TempData 来保留前面步骤中的信息,因为向导不是严格线性的——用户在第一页上的选择实际上导致他们看到第三页的三个选项之一。我通过使用他们的选择将三个派生类之一分配给第三页的视图模型上的基类属性来实现这一点。然后页面本身使用自定义模型绑定器允许我使用@Html.EditorFor(m => m.BaseContainer)并让它显示正确的模板供用户填写。我的问题是当第三页返回时,控制器方法当然需要一个基类对象,这意味着当我将它保存在 TempData 中时,它只保存基类属性。

我可以按照以下方式进行一系列检查if (viewModel.BaseContainer is DerivedClass1),但这似乎是一种黑客行为。使用基类的整个抽象点是控制器不需要知道此时它是哪一个。有没有更优雅的方法来保存对象而不丢失派生类的属性?

4

1 回答 1

0

几个月前我们解决了同样的问题。我们为向导中的每个步骤使用较小的视图模型来解决它,然后,在成功验证后,我们将值复制到一个大视图模型中(包含向导中所有内容的属性)。然后我们将这个大视图模型存储进去TempData并进行下一步。

如果您在从基类派生时添加新属性,那么您正在扩展其接口,您可以为每个派生类中的新属性创建额外的接口,但这听起来不是一个简单的解决方案。

于 2013-02-21T10:45:15.843 回答