我有强烈的类型视的类型

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();
}

编辑:看看 这个职位, ,因为这正是你想要的!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top