Als erstes sollten Sie sich die tatsächlichen Daten ansehen, die mit Chrome-Debug-Tools oder ähnlichem an den Server gesendet werden. Was Sie finden könnten, ist, dass Ihr Kontrollkästchenwert auf on
gesetzt wird, wenn es aktiviert ist, oder es wird komplett fehlen, wenn es nicht markiert ist.
Ein Vorschlag in den Kommentaren war @Html.CheckBoxFor
, aber darunter leidet auch die Tatsache, dass nichts gesendet wird, wenn das Kontrollkästchen deaktiviert ist und in bestimmten Situationen, die immer noch ein Problem werden können.
Sie haben zwei Lösungen - reparieren Sie es auf dem Client oder reparieren Sie es auf dem Server.
Fix es auf dem Client:
Um dies zu tun, müssen Sie (mit Javascript) einem versteckten Feld für jedes Kontrollkästchen hinzuzufügen. Verzeihen Sie mir, ich bin nicht von einem Redakteur um es zu testen, aber es könnte in etwa so aussehen (aus dem Gedächtnis):
$('input[type="checkbox"]').each(function(el) {
var hidden = $('<input type="hidden" />');
hidden.name = el.name;
el.after(hidden);
el.on("change", function(el) {
hidden.value = el.checked ? "true" : "false";
});
});
Fix es auf dem Server:
Um dies zu tun, werden Sie muss eine benutzerdefinierte PropertyBinder
erstellen, die on
als boolean true
erkennt. Dies würde auf einer Eigenschaft-Attribut-Ebene festgelegt werden. Sie könnten alternativ dazu auch die globale ModelBinder
überschreiben, damit Sie eine Eigenschaft nicht extra annotieren müssen, damit dies funktioniert.
Ich persönlich ziehe die „repariert es auf dem Client“ Methode, da Sie erhalten entweder true
oder false
zurück an den Server jedes Mal, das geschrieben ist, was man erwartet und ist in der Nähe von dem Weg dass HtmlHelper
es tut.
Verwenden Sie 'Html.CheckBoxFor' anstelle von manuellem HTML. – Dai
Es ist eine Voraussetzung, manuelles HTML zu verwenden, ich kann Razor nicht verwenden. – user3378165
Ein checkbox post zurück der Wert seines Steuerelements ist markiert (oder nichts, wenn nicht aktiviert. Ihre Einstellung 'value =" false "' so alles, was es jemals reichen kann ist 'false'.Und wenn Sie nicht die 'HtmlHelper'-Methoden verwenden, dann verwenden Sie nicht mvc, da Sie nie die korrekte Modellbindung erhalten. –