Как связать ярлыки с переключателями

Я использую MVC, и у меня есть простая настройка переключателя:

<%=Html.RadioButton("my_flag", True)%><label>Yes</label>
<%=Html.RadioButton("my_flag", False)%><label>No</label>

Единственное, что мне не хватает, это то, что вы не можете щелкнуть метку, чтобы выбрать радиокнопку. Обычно вы используете:

<label for="my_flag">

но это связывает обе метки с последним переключателем. Есть ли способ связать метки с помощью правильного переключателя?

Примечание. Это подражает бумажной форме, поэтому переход на флажок не является вариантом.

Ответ 1

Вам нужно дать двум переключателям одно и то же имя (чтобы они были в одной группе), но разные ids (чтобы вы могли ассоциировать этикетка с каждым отдельно). Я не знаком с ASP.NET MVC, поэтому я не знаю, как это сделать, но это решение.

Изменить: вторая возможность заключается в том, чтобы обернуть переключатели внутри тега метки, например:

<label><%=Html.RadioButton("my_flag", True)%>Yes</label>
<label><%=Html.RadioButton("my_flag", False)%>No</label>

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

Ответ 2

У вас есть два разных способа реализовать это.

Первое из них - простое решение - вставить переключатель в тег <label/>.

<p>
    <label><%=Html.RadioButton("option", "yes") %> Yes</label>
</p>

<p>
    <label><%=Html.RadioButton("option", "no") %> No</label>
</p>

Второй путь - связать каждый переключатель с идентификатором. Это также довольно просто с аргументом htmlAttributes, и это обеспечивает большую гибкость в отношении компоновки формы:

<p>
    <label for="option_yes">Yes:</label>
    <%=Html.RadioButton("option", "yes", new { id = "option_yes" }) %>
</p>

<p>
    <label for="option_no">Np:</label>
    <%=Html.RadioButton("option", "no", new { id = "option_no" }) %>
</p>

Я бы порекомендовал последнее, и, похоже, это тот, о котором вы тоже просите.

ИЗМЕНИТЬ

Фактически вы должны дать аргумент атрибуту ID независимо от того, что. Если вы этого не сделаете, ваш сайт будет иметь несколько элементов с одинаковым идентификатором, и это не приведет к проверке HTML.

Ответ 3

Я не программист asp, поэтому извините, если я что-то скажу: P

Атрибут метки для ссылки на входной идентификатор. Поэтому вам нужно будет сделать что-то вроде

<input type="radio" name="rad1" id="rad1_1"><label for="rad1_1">Rad1</label>
<input type="radio" name="rad1" id="rad1_2"><label for="rad1_2">Rad2</label>

Ответ 4

Вы можете сделать это следующим образом: (Это использует Razor, но его легко перевести.)

@Html.RadioButtonFor(model => model.MyValue, true, new { id = "MyValue_True" })
<label for="MyValue_True">Yes, this is true</label>

@Html.RadioButtonFor(model => model.MyValue, false, new { id = "MyValue_False" })
<label for="MyValue_False">No, this is false</label>

В основном вы вручную указываете атрибут id для переключателей.