Ihre foreach
Schleife nicht for
Attribut für das Label erzeugt (und wenn Sie new { id = p.id.ToString() }
aus dem RadioButton
Methode entfernt, kein id
Attribut hinzugefügt entweder obwohl es das Standard sein Verhalten so tun würde.
Der Grund für die Attribute werden nicht hinzugefügt, wenn Ihr Modell ist IEnumerable<T>
ist mit den HTML-4-Standards, den Staat erfüllen zu müssen, dass
ID-Token mit einem Buchstaben beginnen müssen ([A-Za-z])
HtmlHelpers
erzeugen das id
Attribut basierend auf dem Attribut name
aber ersetzen und [
, ]
und .
Zeichen mit einem Unterstrich einen Konflikt mit jQuery
Selektoren zu verhindern (z.B. Ein .
in einem id
Attribut würde als Klassennamenselektor interpretiert werden). In Ihrem Fall die name
ist name="[0].Name"
für den ersten Punkt in der Sammlung, sondern weil das bedeuten würde, id="_0__Name"
(invalid in HTML-4) zu erzeugen, lässt die HtmlHelper
nur die id
(und im Falle eines label
, das for
Attribut.
ein einfacher Weg, dies zu lösen, ist nur
das Optionsfeld in einem
<label>
Elemente wickelt
<label>
@Html.RadioButton("name", "1", false)
<span>@p.name</span>
</label>
eine weitere Option ist zu erzeugen, um das id
Attribut in RadioButton()
und erzeugt auch ein passendes for
Attribut in der beschriften
@Html.RadioButton("name", "1", false, new { onclick = "ShowOption(this)", id = p.id })
@Html.Label(p.name, new { @for = p.id})
Randbemerkung: Ich empfehle Ihnen, die stongly getippt RadioButtonFor()
und LabelFor()
Methoden.
'' –
Sie sind einfach mein Held! wenn du es als Antwort postest, kann ich es als richtige Antwort machen – Nicklas