web-dev-qa-db-ja.com

Html.CheckboxListのようなHTMLヘルパーを使用せずに、コントローラーのアクションにチェックされたチェックボックスを投稿する

アイテムのリストがあり、チェックボックスのリストでチェックされているアイテムを削除したい。

_Grid.Mvc_を使用して行を表示しているため、CheckboxListのようなものは使用できません。そのため、column.add("<input type="checkbox".....>);を使用して各行にチェックボックスを作成します。

すべてのチェックボックスには独自のIDがあります。

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

チェックしたすべてのチェックボックスIDをコントローラーに渡す方法を教えてください(そこから削除操作を実行します)。ボタンを1回押すだけで、フォームからチェック済みIDの配列をコントローラーアクションに投稿するにはどうすればよいですか?

12
user2614879

生成された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属性は、int[]deletedItems配列を生成するために使用されます。

36
Jeremy Cook

あなたが好きなように生成された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をコントローラーに渡しません。

1
Jun Fan