Model view controller 具有多个表单元素的中继器MVC等值线和复选框

Model view controller 具有多个表单元素的中继器MVC等值线和复选框,model-view-controller,repeater,checkboxlist,Model View Controller,Repeater,Checkboxlist,我需要复制asp中继器的功能,该中继器在MVC应用程序中包含复选框、文本框和偶尔的下拉列表。在传统的webforms中,您会得到一个回发事件,并且很容易获取与复选框(id)关联的所有控件及其值 任何人都有任何好的建议,关于如何使选中复选框的项目的值返回帖子。我能够在FormCollection(甚至是强类型视图)中获取一些数组,但是我还没有找到有效链接这些值的好方法 所有行都有一个复选框和一个文本框,有些行也有一个下拉列表 为了进一步解释。。。 第1行有一个复选框和一个文本框 第2行有一个复选框

我需要复制asp中继器的功能,该中继器在MVC应用程序中包含复选框、文本框和偶尔的下拉列表。在传统的webforms中,您会得到一个回发事件,并且很容易获取与复选框(id)关联的所有控件及其值

任何人都有任何好的建议,关于如何使选中复选框的项目的值返回帖子。我能够在FormCollection(甚至是强类型视图)中获取一些数组,但是我还没有找到有效链接这些值的好方法

所有行都有一个复选框和一个文本框,有些行也有一个下拉列表

为了进一步解释。。。 第1行有一个复选框和一个文本框 第2行有一个复选框、一个文本框和一个下拉列表

如果用户选择第1行和第2行,我需要获取所有表单元素的值(用于某些计算)。此外,我还没有找到一种处理验证错误的好方法


非常感谢您的任何建议。

最简单的方法是迭代您将拥有中继器的集合。使用Razor语法:

@using (Html.BeginForm()) {
<table>
@for (var i = 0; i < Models.Items.Count; i++) {
<tr>
<td>
  @Html.CheckBoxFor(x => Model.Items[i].SomeBool)
</td>
<td>
  @Html.TextBoxFor(x => Model.Items[i].SomeString)
</td>
</tr>
}
</table>
<button type="submit">Go</button>
}

假设视图中的模型类型为MyViewModel。一旦你了解了它是如何工作的,你就可以研究它了。

最简单的方法就是迭代你有一个中继器的集合。使用Razor语法:

@using (Html.BeginForm()) {
<table>
@for (var i = 0; i < Models.Items.Count; i++) {
<tr>
<td>
  @Html.CheckBoxFor(x => Model.Items[i].SomeBool)
</td>
<td>
  @Html.TextBoxFor(x => Model.Items[i].SomeString)
</td>
</tr>
}
</table>
<button type="submit">Go</button>
}

假设视图中的模型类型为MyViewModel。一旦您了解了这是如何工作的,您就可以进行研究。

问题不在于html的创建,而在于所选值的提取,并确保只使用与所选复选框关联的元素。表单发布时,具有相同name属性的所有元素将作为数组发送到服务器。可以只遍历checkbox数组,对于每个为true的元素,在textbox数组和dropdownlist数组中找到相应的元素。问题是ddl并不在每条记录上,因此数组元素是不同的。问题不在于html的创建,而在于所选值的提取以及确保只使用与所选复选框关联的元素。表单发布时,具有相同name属性的所有元素将作为数组发送到服务器。可以只遍历checkbox数组,对于每个为true的元素,在textbox数组和dropdownlist数组中找到相应的元素。问题是ddl并不在每条记录上,所以数组元素是不同的