Hinzufügen von "name" -Attribut zu CheckBoxFor

8

Ich versuche, meinem CheckBoxFor ein "name" -Attribut hinzuzufügen und es nicht zum Laufen zu bringen.

%Vor%

Irgendeine Idee, was ich hier falsch mache?

Gerendertes HTML:

%Vor%     
user547794 24.07.2012, 19:43
quelle

8 Antworten

14

BEARBEITEN am 09/07/2016

Dies funktioniert nicht

%Vor%

Aber das wird funktionieren

%Vor%

Der Trick besteht darin, den Großbuchstaben "N" in "Name"

zu verwenden

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

aufgerufen wird

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

%Vor%

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.

%Vor%

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.

    
Shyju 24.07.2012, 20:07
quelle
14

Eigentlich brauchst du nur "@Name" (mit einem Großbuchstaben N), wie unten gezeigt, und alles sollte gut funktionieren! :)

%Vor%

Prost!

    
Tim Kelly 21.08.2013 21:36
quelle
11

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

%Vor%     
Serg Rogovtsev 24.07.2012 20:06
quelle
1

Sie brauchen nicht das @ -Symbol im Namen

%Vor%     
HatSoft 24.07.2012 19:50
quelle
0

Versuchen Sie es mit dem @:

%Vor%     
Shane Fulmer 24.07.2012 19:50
quelle
0

Erstellen Sie einfach eine temporäre Variable und übergeben Sie diese im Lambda-Ausdruck.

%Vor%

Aktualisieren

Serg Rogovtsev hat eigentlich recht. Die '... For' Version der Hilfsfunktion stellt automatisch das Namensattribut für Sie bereit.

    
jschell12 05.11.2012 20:48
quelle
0

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:

Ссылка

    
Karan 31.03.2013 16:52
quelle
0

Fügen Sie zuerst Ihrem Modell, das DisplayAttribute

aufgerufen hat, einen Filter hinzu %Vor%

Und Sie können Label für Modell

verwenden %Vor%     
Rahul 06.11.2013 05:54
quelle

Tags und Links