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
,