Ваш foreach
цикл не создает for
атрибут для метки (и, если вы удалили new { id = p.id.ToString() }
от метода RadioButton
, не id
атрибут не будет добавлен либо, несмотря на его поведение по умолчанию, чтобы сделать это.
Причина, по которой атрибуты не добавляются, когда ваша модель IEnumerable<T>
является соответствие стандартам HTML-4, которые утверждают, что
ID лексемы должны начинаться с буквы ([A-Za-Z])
HtmlHelpers
генерировать атрибут id
на основе атрибута name
, но заменить и [
, ]
и .
символы с подчеркиванием, чтобы предотвратить конфликт с jQuery
селекторов (например, a .
в атрибуте id
будет интерпретироваться как селектор имен классов). В вашем случае name
является name="[0].Name"
для первого элемента в коллекции, но так как это означало бы генерировать id="_0__Name"
(недействительный в HTML-4), то HtmlHelper
просто опускает id
(и в случае label
, атрибут for
.
простой способ решить эту проблему, чтобы просто обернуть переключатель в <label>
элемент
<label>
@Html.RadioButton("name", "1", false)
<span>@p.name</span>
</label>
Другой вариант заключается в создании атрибута id
в RadioButton()
, а также генерировать соответствующий for
атрибут в маркировать
@Html.RadioButton("name", "1", false, new { onclick = "ShowOption(this)", id = p.id })
@Html.Label(p.name, new { @for = p.id})
Side Примечание: Я рекомендую вам использовать stongly типизированных RadioButtonFor()
и LabelFor()
методы.
'' –
ты просто мой герой! если вы опубликуете его как ответ, чтобы я мог сделать его правильным ответом – Nicklas