使用视图中复选框的动态列表,如何创建模型

时间:2010-01-07 17:34:48

标签: asp.net-mvc asp.net-mvc-2

我有一个asp mvc 2应用程序,我希望根据数据库中的记录列表显示用户可以选择的复选框列表。要显示列表,我的模型包含一个List对象,视图有一个foreach,并为列表中的每个项输出Html.CheckBox。

是否有办法使用所选复选框填充模型,因为模型不能具有每个复选框的特定属性,因为列表是动态的?或者我是否必须自己手动迭代表单变量?

编辑:根据sabanito的评论的额外详情 所以在一个简单的视图/模型场景中,如果我的模型有一个名为Property1的属性,那么我的视图为Property1输出了一个Textbox,当通过提交按钮发布表单时,mvc框架将自动使用包含文本的Property1填充模型已输入文本框并将该模型传递给Controllers操作。

因为我正在处理用户可以检查的动态选项列表,所以我无法在模型中编写显式布尔属性,并在我的视图中显式创建复选框。鉴于我的列表是动态的,我想知道是否有方法来创建我的模型和视图,以便mvc框架能够在发布表单时正确填充模型。

2 个答案:

答案 0 :(得分:3)

这就是我要做的事情:

您是否在动态生成复选框时遇到任何问题?

如果没有,请在ViewModel上创建一个属性:

public List<string> CheckboxResults { get; set; }

在视图中生成复选框时,请确保它们共享name =“CheckboxResults”。当MVC看到您的ViewModel作为action方法的参数时,它将自动绑定并将所有“CheckboxResults”结果放入List(以及您的其他ViewModel属性)。现在,您有一个动态列表,基于您的用户选中的复选框,您可以将其发送到您的DomainModel或任何地方。

很酷的东西。如果您在动态生成复选框时遇到问题,请告诉我,这是一个单独的问题,而不是模型绑定到列表。

答案 1 :(得分:1)

使用完全反映视图的ViewModel,并将您的域模型映射到viewmodel。

首先,在视图中直接使用域模型似乎是合适的,因为没有比使用它们更简单的理由。但是,随着视图随着时间的推移变得越来越复杂,您最终会在视图中放置一个条件逻辑TON,并最终得到意大利面条。为了缓解这种情况,我们通常创建一个与视图相关的ViewModel。