2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ASP.Net Core MVC チェックボックスがチェックされて無くても値を送信

Last updated at Posted at 2022-04-04

概要

Qiita - HTML チェックボックスでfalseも判定する」を見て、
ASP.NET Core MVCでも値を送れるのか試したところ、
下記の並び順では無理でした。

<input type="hidden" name="test" value="0">
<input type="checkbox" name="test" value="1">

軽く説明

asp-for="Test"は、HTMLの属性id="Test"とname="Test"として
展開され、submitした際にname="Test"が捕捉され、
サーバへデータが飛びます。

Microsoftは捻くれており、nameが重複して存在した場合、
最初に現れたnameのみをサーバに送ってくれるので
<input type="hidden" name="test" value="0">
が先にあると後ろのチェック状態がどうであろうと
type="hidden"のvalue="0"しか送られなくなります。

解決方法

チェックボックスより後ろに書く

<form action="/" method="post">
    <input type="checkbox" asp-for="Test" value="1">
    <input type="hidden" asp-for="Test" value="0"> @*後ろに書く*@
    <button>送信</button>
</form>

まとめ

これがMicrosoft Quality...

補足すると同名の複数チェックボックスの取得は、ビューモデルの型に
List<bool>やList<string>を使うことで可能となっています。

チェックボックスにチェックが無い場合に、0を送りたいという
要件はhiddenの要素をチェックボックスより後ろに書くことで
可能となります。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?