2016-03-22 3 views
3

Ich versuche, ein Radiobuttonlist in Rasierapparat Syntax zu machen bisher habe ich mit diesemMVC RadiobuttonFür Razor wie kann man ein Label klickfähig machen?

@foreach (var p in Model) 
{ 
    <div id="projectList" class="col-lg-5"> 
     @Html.RadioButton("name", "1", false, new { onCLick = "ShowOption(this)", id = p.id.ToString() }) 
     @Html.Label(p.id.ToString(), p.name) 
    </div> 
} 

aber das Label ist nicht im Zusammenhang mit dem Radiobutton kommen.

+3

'' –

+0

Sie sind einfach mein Held! wenn du es als Antwort postest, kann ich es als richtige Antwort machen – Nicklas

Antwort

1

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.