模型结合的回发数据,以一个控制器的行动类型的参数清单<T>
-
18-09-2019 - |
题
我有强烈的类型视的类型
List<List<MyViewModelClass>>
外表将始终有两个列表中的 List<MyViewModelClass>
.每两个外列出了,我希望显示一组选框。每个组可以有一个任意数量的选择。
我的视图模型类类似于这样的:
public class MyViewModelClass
{
public Area Area { get; set; }
public bool IsGeneric { get; set; }
public string Code { get; set; }
public bool IsChecked { get; set; }
}
所以最终查看会看起来是这样的:
请选择那些适用于:
第一组选择:
- x 备选案文1
- x 备选案文2
- x 选项3
- 等等。
第二组的选择:
- x 第二个选项1
- x 第二个选项2
- x 第二个选项3
- x 第二个选项4
- 等等。
应该选择框显示 MyViewModelClass.Area.Name
, 和他们的价值应是相关的 MyViewModelClass.Area.Id
.检查状态当然是相关的 MyViewModel.IsChecked
.
的问题
我不知道应该如何使用 Html.CheckBox()
或 Html.CheckBoxFor()
帮助,以显示我的选择框?我必须让这些价值回到服务器上的一个回发的课程。
我想我控制行动的这些:
public ActionResult ConsumeSelections(List<List<MyViewModelClass>> data)
{
// process data
}
public ActionResult ConsumeSelections(List<MyViewModelClass> first, List<MyViewModelClass> second)
{
// process data
}
如果这样能让事情变得更简单,我可以做一个独立视图模型,如:
public class Options
{
public List<MyViewModelClass> First { get; set; }
public List<MyViewModelClass> Second { get; set; }
}
以及改变我的第一个版本控制器,采取以下行动:
public ActionResult ConsumeSelections(Options data)
{
// process data
}
解决方案 2
解决方案
事实证明这是不那么复杂。你所要做的就是你的名字控制的适当一切都会结合在一起,因为它应该是。此。无论你的控制,它们应始终被命名,如:
name="first[0].propName"
name="first[1].propName"
name="first[2].propName"
name="first[3].propName"
...
// or
name="first[0].data[0].property"
name="first[0].data[1].property"
name="first[0].data[2].property"
...
name="first[1].data[0].property"
name="first[1].data[1].property"
...
所有这些将获得开 List<SomeType> first
控制器的操作参数(第二个具有另一个汇集内部的收集)。
非常重要的注意
如果你加入/消除这些控制动态使用Javascript,你必须确保,这一索引是连续从0开始,并且不具有任何差距。你会有一个很好的工作程序与动态数量元素集。
你可以读它 我的博客 为好。
其他提示
一般来说,我创建一种类型(型号),"模型"认为我想创建。即
public class FooViewModel
{
public List<Option> General { get; set; }
public List<Option> Others { get; set; }
//Some Methods and other properties
}
public FooController :...
{
private FooViewModel fooViewModel = new FooViewModel();
}
编辑:看看 这个职位, ,因为这正是你想要的!
不隶属于 StackOverflow