2016-03-22 7 views
3

Я пытаюсь сделать RadioButtonList в синтаксисе бритвы до сих пор я пришел с этимMVC RadiobuttonFor Razor, как сделать доступный ярлык?

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

но метка не связана с радиокнопкой.

+3

'' –

+0

ты просто мой герой! если вы опубликуете его как ответ, чтобы я мог сделать его правильным ответом – Nicklas

ответ

1

Ваш 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() методы.

 Смежные вопросы

  • Нет связанных вопросов^_^