将自定义列表/字典绑定到MVC视图中的下拉列表

时间:2012-05-30 16:48:54

标签: asp.net-mvc

我有一堆表。每个表都有一个“状态”列。该列具有字符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,以容纳状态列表。

还有其他方法可以达到这个目的吗?

2 个答案:

答案 0 :(得分:1)

我建议为每个独特的视图使用视图模型。从长远来看,它使UI更易于使用和维护。

视图模型方法可以走极端,并在我的经验中适得其反。例如,在为客户实体创建VM时,我不会重新创建具有客户实体的所有相同属性的CustomerVM。相反,我只是在CustomerVM上创建一个包含整个客户实体的客户属性。有些人可能不同意这种方法,因为如果视图没有显示所有客户实体信息,我可能会向View公开更多信息而不是它需要的信息。这是事实,但我喜欢快速且易于实施和维护的解决方案。

你永远不知道将来会有什么需要。随着时间的推移,我发现这种方法是最灵活的解决方案。

那么,您可以为所有具有常见查找列表的视图创建基本视图模型,并让您的新视图模型继承自此基本VM。

这是一种方法。 :)

答案 1 :(得分:0)