将选中的复选框发布到控制器操作,而不使用HTML帮助程序,如Html.CheckboxList

时间:2014-07-30 13:55:47

标签: asp.net-mvc razor model-binding

我有一个项目列表,我想删除在复选框列表中选中的项目。

我不能使用像CheckboxList这样的东西,因为我正在使用Grid.Mvc来显示我的线条。这就是我用column.add("<input type="checkbox".....>);在每一行创建复选框的原因。

每个复选框都有自己的ID:

<input type="checkbox" id="3">
<input type="checkbox" id="4">...

我想知道如何将所有选中的复选框ID传递给控制器​​(从那里我将执行删除操作)。如何通过一个按钮将我的表单中的已检查ID数组发布到我的控制器操作?

2 个答案:

答案 0 :(得分:36)

生成的HTML示例:

<label><input type="checkbox" name="deletedItems" value="3"> Some label for 3</label>
<label><input type="checkbox" name="deletedItems" value="4"> Some label for 4</label>
...
<button type="submit">Submit</submit>

控制器操作:

[HttpPost]
public ActionResult MyAction(int[] deletedItems)
{
    // deletedItems contains all values that were checked
    // when the submit button was clicked. Here you can
    // loop through the array of IDs and delete by ID.
    ...
}

请注意,复选框没有id属性。它不用于模型绑定。相反,它有一个名为“deletedItems”的name属性,它匹配MyAction控制器操作的参数名称,这是模型绑定时使用的属性。已选中复选框的value属性将用于填充deletedItems的{​​{1}}数组。

答案 1 :(得分:1)

如果你想生成像

这样的html
<label><input type="checkbox" name="deletedItems" value="3"> Some label for 3</label>
<label><input type="checkbox" name="deletedItems" value="4"> Some label for 4</label>

然后您可以使用以下代码

<td>@Html.CheckBox("selectedItems", new { @value = @item.checkId })</td> 
<td><input id="selectedItems" name="selectedItems" type="checkbox" value="11503" />
    <input name="selectedItems" type="hidden" value="false" /> 
</td>

它不会将selectedItems传递给控制器​​。