我有一堆表。每个表都有一个“状态”列。该列具有字符A或I. A =活动,I =非活动。
我有一个与每个表对应的创建视图。我想显示一个显示两个值的下拉框 - 活动和非活动,然后相应地映射它们。
我知道我可以在每个需要下拉状态的视图中执行以下操作
@Html.DropDownListFor(model => model.status, new SelectList(new[] { new { ID = "A", Desc = "Active" }, new { ID = "I", Desc = "Inactive" } }, "ID", "Desc"))
然而,如果明天我决定增加一个状态,我将不得不改变每个视图。
另一种选择是创建一个字典并将其传递给视图模型,如this article
中所述。然而,这意味着我必须为每个模型创建一个viewmodel,以容纳状态列表。
还有其他方法可以达到这个目的吗?
答案 0 :(得分:1)
我建议为每个独特的视图使用视图模型。从长远来看,它使UI更易于使用和维护。
视图模型方法可以走极端,并在我的经验中适得其反。例如,在为客户实体创建VM时,我不会重新创建具有客户实体的所有相同属性的CustomerVM。相反,我只是在CustomerVM上创建一个包含整个客户实体的客户属性。有些人可能不同意这种方法,因为如果视图没有显示所有客户实体信息,我可能会向View公开更多信息而不是它需要的信息。这是事实,但我喜欢快速且易于实施和维护的解决方案。
你永远不知道将来会有什么需要。随着时间的推移,我发现这种方法是最灵活的解决方案。
那么,您可以为所有具有常见查找列表的视图创建基本视图模型,并让您的新视图模型继承自此基本VM。
这是一种方法。 :)
答案 1 :(得分:0)