Di aplikasi ASP.NET MVC saya, saya merender kotak centang menggunakan kode berikut:
<%= Html.CheckBoxFor(i=>i.ReceiveRSVPNotifications) %>
Sekarang, saya melihat bahwa ini menjadikan kedua tag masukan kotak centang dan tag masukan tersembunyi. Masalah yang saya alami adalah ketika saya mencoba mengambil nilai dari kotak centang menggunakan FormCollection:
FormValues["ReceiveRSVPNotifications"]
Saya mendapatkan nilai "benar, salah". Saat melihat HTML yang dirender, saya dapat melihat yang berikut:
<input id="ReceiveRSVPNotifications" name="ReceiveRSVPNotifications" value="true" type="checkbox">
<input name="ReceiveRSVPNotifications" value="false" type="hidden">
Jadi koleksi FormValues tampaknya menggabungkan kedua nilai ini karena mereka memiliki nama yang sama.
Ada Ide?
sumber
<input>
tag.false
. Lihatlah jawaban RyanJMcGowan di bawah ini: "Mengirim input tersembunyi memungkinkan untuk mengetahui bahwa kotak centang ada pada halaman ketika permintaan diajukan."Saya memiliki masalah yang sama dengan Shawn (di atas). Pendekatan ini mungkin bagus untuk POST, tetapi sangat menyebalkan untuk GET. Oleh karena itu saya menerapkan ekstensi Html sederhana yang hanya mencabut bidang tersembunyi.
Masalah saya sekarang adalah bahwa saya tidak ingin perubahan pada kerangka kerja MVC untuk memecahkan kode saya. Jadi saya harus memastikan saya memiliki cakupan pengujian yang menjelaskan kontrak baru ini.
sumber
Saya menggunakan metode alternatif ini untuk merender kotak centang untuk formulir GET:
Ini mirip dengan metode Chris Kemp , yang berfungsi dengan baik, kecuali yang ini tidak menggunakan yang mendasarinya
CheckBoxFor
danRegex.Replace
. Ini didasarkan pada sumberHtml.CheckBoxFor
metode asli .sumber
Berikut adalah kode sumber untuk tag input tambahan. Microsoft cukup baik untuk memasukkan komentar yang membahas hal ini dengan tepat.
sumber
Saya pikir solusi paling sederhana adalah merender elemen INPUT secara langsung sebagai berikut:
Dalam sintaks Razor bahkan lebih mudah, karena atribut 'checked' langsung dirender dengan nilai "checked" ketika diberi nilai sisi server 'benar'.
sumber