Asp.net mvc 2 将回发数据绑定到列表类型的控制器操作参数的模型<;T>;
我对类型有很强的看法Asp.net mvc 2 将回发数据绑定到列表类型的控制器操作参数的模型<;T>;,asp.net-mvc-2,viewmodel,model-binding,generic-list,Asp.net Mvc 2,Viewmodel,Model Binding,Generic List,我对类型有很强的看法 List<List<MyViewModelClass>> 因此,最终视图将类似于: 请选择那些适用的: 第一组选择: x选项1 x选项2 x备选方案3 等等 第二组选择: 第二种选择1 第二种选择2 第二种选择3 第二种选择4 等等 复选框应显示MyViewModelClass.Area.Name,其值应与MyViewModelClass.Area.Id相关。选中状态当然与MyViewModel.IsChecked相关 问题: 我想知道
List<List<MyViewModelClass>>
因此,最终视图将类似于:
请选择那些适用的: 第一组选择:
- x选项1
- x选项2
- x备选方案3
- 等等
- 第二种选择1
- 第二种选择2
- 第二种选择3
- 第二种选择4
- 等等
复选框应显示
MyViewModelClass.Area.Name
,其值应与MyViewModelClass.Area.Id
相关。选中状态当然与MyViewModel.IsChecked相关
问题:
我想知道应该如何使用Html.CheckBox()
或Html.CheckBoxFor()
helper来显示我的复选框?当然,我必须在回发时将这些值返回到服务器
我希望我的控制器动作如下:
public ActionResult ConsumeSelections(List<List<MyViewModelClass>> data)
{
// process data
}
public ActionResult ConsumeSelections(List<MyViewModelClass> first, List<MyViewModelClass> second)
{
// process data
}
通常,我创建一个类型(模型),该类型“建模”我要创建的视图。
i、 e
公共类FooViewModel
{
公共列表常规{get;set;}
公共列表其他{get;set;}
//一些方法和其他属性
}
公共财务总监:。。。
{
私有FooViewModel FooViewModel=新FooViewModel();
}
编辑:
看看吧,这正是你想要的 通常,我会创建一个类型(模型),用于“建模”我要创建的视图。
i、 e
公共类FooViewModel
{
公共列表常规{get;set;}
公共列表其他{get;set;}
//一些方法和其他属性
}
公共财务总监:。。。
{
私有FooViewModel FooViewModel=新FooViewModel();
}
编辑:
看看吧,这正是你想要的 解决方案
事实证明,这一点都不复杂。你所要做的就是适当地命名你的控件,所有的东西都会按它应该的样子绑定在一起。所以无论您的控件是什么,它们的名称应始终如下所示:
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"
...
所有这些都将绑定到第一个列表控制器动作参数(第二个在集合中有另一个集合)
非常重要的注意事项如果使用Javascript动态添加/删除这些控件,则必须确保索引从0开始是连续的,并且没有任何间隙。你会有一个很好的工作应用程序,在一个集合中有动态数量的元素 您也可以在中阅读相关内容。解决方案 事实证明,这一点都不复杂。你所要做的就是适当地命名你的控件,所有的东西都会按它应该的样子绑定在一起。所以无论您的控件是什么,它们的名称应始终如下所示:
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"
...
所有这些都将绑定到第一个列表控制器动作参数(第二个在集合中有另一个集合)
非常重要的注意事项如果使用Javascript动态添加/删除这些控件,则必须确保索引从0开始是连续的,并且没有任何间隙。你会有一个很好的工作应用程序,在一个集合中有动态数量的元素
您也可以在中阅读相关内容。好的。这只是一个视图模型(我也提出了我的问题)。如何使用其中的数据?显示数据很简单,但是当你想要一个带有复选框的表单返回到服务器时,如何将数据放在视图上。我已经更新了我的帖子,添加了一个链接到一篇我认为你正在寻找的帖子。在某种程度上是这样的,但最终还是自定义绑定。我编辑了我的问题,也包括了我的行动方法…好的。这只是一个视图模型(我也提出了我的问题)。如何使用其中的数据?显示数据很简单,但是当你想要一个带有复选框的表单返回到服务器时,如何将数据放在视图上。我已经更新了我的帖子,添加了一个链接到一篇我认为你正在寻找的帖子。在某种程度上是这样的,但最终还是自定义绑定。我编辑了我的问题,也包括了我的行动方法。。。
public ActionResult ConsumeSelections(Options data)
{
// process data
}
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();
}
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"
...