2016-04-21 13 views
0

Ich versuche, Html.LabelFor wie folgt zu verwenden, aber es wird nicht richtig dargestellt, dh anstelle von ProviderName Wert wie "AT & T" zeigt es nur ProviderName Text und nicht den Wert von ProviderName.HTML.LabelFor nicht richtig rendern

<div id="ServiceProvider" class="main_filter" name="filterDiv"> 
    <h4>Service Providers</h4> 
    @for (var i = 0; i < allProviders.Count(); i++) 
    { 
     <div class="filter_chkbox_div"> 
      @Html.CheckBoxFor(m => allProviders[i].Selected, new { value = allProviders[i].ProviderCode, id = allProviders[i].ProviderCode, style="display:none" }) 
      @Html.LabelFor(m => allProviders[i].ProviderName) 
     </div> 
    } 

Während wenn ich Html.DisplayFor wie folgt aus:

<label>@Html.DisplayFor(m => allProviders[i].ProviderName)</label> 

zeigt es den Wert von Provider. Was ist falsch an meinem Code? Ich möchte Html.LabelFor verwenden. Bitte helfen

+0

'LabelFor()' zeigt den Namen der Eigenschaft an (oder den Wert von 'DisplayAttribute.Name', falls angewendet) - das ist der Zweck. In Ihrem Fall können Sie '@ Html.LabelFor (m => allProviders [i] .ProviderName, allProviders [i] .ProviderName)' verwenden, um den Wert der Eigenschaft anzuzeigen, aber die Beschriftung mit dem Kontrollkästchen zu verknüpfen (aber wie zuvor erwähnt, Ihr Code wird aufgrund Ihrer falschen Verwendung von 'CheckBoxFor()' fehlschlagen.) –

+0

Ok. Eigentlich möchte ich dem 'ProviderName' eine bestimmte ID geben. Ist es möglich, DisplayFor() zu geben und zu identifizieren? So etwas wie '' –

+0

Was meinst du mit 'id'? 'DisplayFor()' erzeugt nur etwas Text. Sie können keine Attribute hinzufügen, da kein Element generiert wird. –

Antwort

0

Der Zweck LabelFor() ist es, den Namen der Eigenschaft angezeigt werden (oder wenn die Eigenschaft ein [Display] Attribut enthält, dann den Wert seiner Name Eigenschaft), und mit einem Formular-Steuerelement zu verknüpfen (auf sie geklickt wird, den Fokus auf die Steuerung setzen).

Allerdings gibt es overloads, die Ihren geben Sie den Text erlaubt angezeigt werden, so dass in Ihrem Fall es

@Html.LabelFor(m => allProviders[i].ProviderName, allProviders[i].ProviderName) 

die jedoch

<label for="allProviders_0__ProviderName">AT&T</label> 

generiert würde dies nicht als handeln label (um den Fokus festzulegen), weil Sie das Attribut id des zugehörigen Steuerelements überschrieben haben. Es ist nicht klar, warum Sie das tun würden (und wenn ProviderCode nicht eindeutig ist, dann generieren Sie ungültiges HTML), aber Sie sollten new { id = allProviders[i].ProviderCode } aus der CheckBoxFor() Methode entfernen, so dass das Standard id Attribut (id="allProviders_0__ProviderName") generiert wird.

Seitennotiz: Sie verwenden new { value = allProviders[i].ProviderCode } bedeutet, dass Modellbindung wird fehlschlagen (Sie sollten nie das Wertattribut festlegen, wenn Sie die Methoden HtmlHelper verwenden). Ihr Eigentum Selected ist typeof bool aber ProviderCode ist nicht. Sie generieren ein Wertattribut, das nicht an eine bool gebunden werden kann. Wenn das Kontrollkästchen aktiviert ist, wird (zB) "ABC" gesendet, die Bindung wird fehlschlagen und der Wert wird auf false festgelegt, und wenn es deaktiviert ist Der Wert wird auch auf false gesetzt.