HTML.LabelFor не отображается должным образом

Я пытаюсь использовать Html.LabelFor, как это, но он не рендерится должным образом, т. Е. Вместо отображения значения ProviderName, например, "AT&T", просто отображается ProviderName текст, а не значение ProviderName,

<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>
    }

Принимая во внимание, когда я использую Html.Display для этого:

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

он отображает значение ProviderName. Что не так с моим кодом? Я хочу использовать Html.LabelFor. Пожалуйста помоги

1 ответ

Решение

Цель LabelFor() должен отображать имя свойства (или если свойство включает в себя [Display] атрибут, то значение его Name свойство), и связать его с элементом управления формы (щелкнув по нему, вы установите фокус на элемент управления).

Однако есть перегрузки, которые позволяют указать текст, который будет отображаться, так что в вашем случае это будет

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

который будет генерировать

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

однако это не будет действовать как метка (для установки фокуса), потому что вы перезаписали id атрибут связанного контроля. Не понятно, почему вы это сделаете (и если ProviderCode не является уникальным, то вы генерируете недопустимый HTML), но вы должны удалить new { id = allProviders[i].ProviderCode } от CheckBoxFor() метод, так что по умолчанию id атрибут (id="allProviders_0__ProviderName") генерируется.

Примечание: вы используете new { value = allProviders[i].ProviderCode } означает, что привязка модели не удастся (вы никогда не должны устанавливать атрибут значения при использовании HtmlHelper методы). Ваша собственность Selected это typeof bool но ProviderCode не является. Вы создаете атрибут значения, который не может быть привязан к bool и в результате будет установлено, что если флажок установлен, то он отправит (скажем) "ABC", привязка не будет выполнена, и значение будет установлено на falseи, если он не отмечен, значение также будет установлено в false,

Другие вопросы по тегам