Saya hanya memperhatikan bahwa Html.CheckBox("foo")
menghasilkan 2 input, bukan satu, ada yang tahu mengapa demikian?
<input id="foo" name="foo" type="checkbox" value="true" />
<input name="foo" type="hidden" value="false" />
asp.net-mvc
Omu
sumber
sumber
Jawaban:
Jika kotak centang tidak dipilih, bidang formulir tidak dikirimkan. Itulah sebabnya selalu ada nilai salah di bidang tersembunyi. Jika Anda meninggalkan kotak centang tidak dicentang, formulir akan tetap memiliki nilai dari bidang tersembunyi. Begitulah cara ASP.NET MVC menangani nilai kotak centang.
Jika Anda ingin mengonfirmasi hal itu, letakkan kotak centang pada formulir bukan dengan Html. Tersembunyi, tetapi dengan
<input type="checkbox" name="MyTestCheckboxValue"></input>
. Biarkan kotak centang tidak dicentang, kirim formulir dan lihat nilai permintaan yang diposting di sisi server. Anda akan melihat bahwa tidak ada nilai kotak centang. Jika Anda memiliki bidang tersembunyi, ini akan berisiMyTestCheckboxValue
entri denganfalse
nilai.sumber
IsActive
, yang diinisiasitrue
dalam konstruktor. Pengguna membatalkan centang, tetapi karena nilai tidak dikirim ke server, pengikat model tidak mengambilnya, dan nilai properti tidak berubah. Pengikat model tidak boleh berasumsi, bahwa jika nilai tidak dikirim, itu disetel ke false, karena itu bisa jadi keputusan Anda untuk tidak mengirim nilai ini.false
nilai bahkan jika mereka diperiksa, dan itu membingungkan. Kotak centang yang dinonaktifkan tidak boleh mengirim nilai apa pun, jika ASP.NET ingin kompatibel dengan perilaku HTTP default.Anda dapat menulis helper untuk mencegah penambahan input tersembunyi:
Gunakan:
sumber
@using Your.Name.Space
di bagian atas file .cshtml razor view Anda.System.Web.Mvc.Html
agar dapat diakses di semua tampilanketika kotak centang dicentang dan dikirimkan lakukan ini
Lihat
sumber
Pendekatan manual adalah ini:
sumber
Ini adalah versi yang sangat diketik dari solusi Alexander Trofimov:
sumber
Gunakan Berisi, ini akan berfungsi dengan dua kemungkinan nilai posting: "false" atau "true, false".
sumber
Input tersembunyi menyebabkan masalah dengan kotak centang gaya. Jadi saya membuat Ekstensi Helper Html untuk menempatkan input tersembunyi di luar div yang berisi Kotak Centang.
Hasil
sumber
Ini bukan bug! Ini menambahkan kemungkinan selalu memiliki nilai, setelah memposting formulir ke server. Jika Anda ingin menangani bidang input kotak centang dengan jQuery, gunakan metode prop (lulus properti 'diperiksa' sebagai parameter). Contoh:
$('#id').prop('checked')
sumber
Anda dapat mencoba menginisialisasi konstruktor Model Anda seperti itu:
dan menurut Anda:
sumber
Saya menemukan ini benar-benar menyebabkan masalah ketika saya memiliki WebGrid. Tautan pengurutan pada WebGrid akan berubah oleh querystring yang digandakan atau x = true & x = false ke x = true, false dan menyebabkan kesalahan parse pada kotak centang untuk.
Saya akhirnya menggunakan jQuery untuk menghapus bidang tersembunyi di sisi klien:
sumber