Ich versuche, meinem CheckBoxFor
ein "name" -Attribut hinzuzufügen und es nicht zum Laufen zu bringen.
Irgendeine Idee, was ich hier falsch mache?
Gerendertes HTML:
%Vor%BEARBEITEN am 09/07/2016
Dies funktioniert nicht
%Vor%Aber das wird funktionieren
%Vor% Der Trick besteht darin, den Großbuchstaben "N"
in "Name"
Ich glaube nicht, dass das möglich ist . Sie können das name
-Attribut für ein Checkbox-Element nicht ändern, wenn Sie die HTML-Helper-Methode verwenden. Aus Neugierde habe ich in den MVC-Quellcode geschaut und etwas Interessantes in InputHelper
method gefunden, das von der CheckBoxHelper
-Methode aufgerufen wird, die von der CheckBoxFor
-Methode
Es ruft die MergeAttribute-Methode für " type
", " name
" und " value
" auf. Und dieser Code ist nur für das Checkbox -Element
EDIT: Blick in die MergeAttribute-Methode und so ist es
%Vor% Also ruft es MergeAttribute
der Klasse TagBuilder
auf und sieht so aus
Und die erste If
Bedingung gibt true zurück und die innere if
wird nicht wahr zurückgegeben, weil (ich glaube) name
in der Attributes
Sammlung vorhanden ist. Also wird nur die return
Anweisung ausgeführt.
Lösung : Anstatt die Html.CheckBoxFor
Hilfsmethode zu verwenden, können Sie die Methode Html.CheckBox
verwenden.
So wird Ihr Code
%Vor%Der erste Parameter ist der Name, den Sie für das Eingabeelement haben möchten.
Auch, wie in einer der anderen Antwort erklärt, Wenn Sie new { @Name="MyCustomName"}
verwenden und es das Kontrollkästchen generiert Element mit dem Namen, den Sie übergeben. Aber wird das verborgene Eingabefeld mit diesem Namen nicht erzeugen . Ihr ausgeblendetes Feld hat immer noch den gleichen Namen wie der Name Ihrer Modelleigenschaft. CheckboxFor
Hilfsmethode erzeugt das versteckte Feld um den ausgewählten / nicht ausgewählten Wert des Kontrollkästchens in diesem ausgeblendeten Feld zu speichern. Daher ist es wichtig, dass beide Felder (Kontrollkästchen und zugehöriges verstecktes Feld) gleich sind.
Die beste Lösung ist also, die Html.CheckBox
Hilfsmethode zu verwenden. Dies erzeugt auch den richtigen Namen für das versteckte Feld.
Kann das nicht tun. Der ganze Punkt von CheckBoxFor
besteht darin, name
automatisch zu generieren. Wenn Sie Ihren eigenen Namen haben möchten, verwenden Sie
In CheckBoxFor Helfer binden wir das Steuerelement an die Eigenschaft mit Ausdruck. Der Eigenschaftsname wird zum Festlegen des Namensattributs des Steuerelements verwendet.
%Vor%Wenn ich die Modelleigenschaft mit dem Ankreuzfeld verbinde, weist sie das Namensattribut des Steuerelements wie folgt selbst mit dem Eigenschaftsnamen zu:
Gerendertes HTML:
%Vor%Sie können den CheckBox-Helfer möglicherweise verwenden, um ein name-Attribut anzugeben, oder Sie können Ihre eigene benutzerdefinierte Hilfsmethode erstellen, in der Sie Attribute nach Ihren Wünschen zuweisen können.
Weitere Informationen erhalten Sie unter:
Tags und Links asp.net-mvc-3 c# razor entity