Основываясь на моих исследованиях, правильный способ закодировать флажок в MVC выглядит следующим образом.
@Html.CheckBoxFor(m => m.RememberMe)
@Html.LabelFor(m => m.RememberMe)
Это сделает флажок, выведет метку для флажка и сделаем метку нажатой, что означает, что щелчок по метке также переключает флажок.
Но как насчет случая, когда есть несколько флажков для одного поля модели представления? (Например, возможно, каждый флажок представляет бит в целочисленном значении.) Или, что еще лучше, что делать с переключателями, где всегда есть несколько параметров, связанных с одним и тем же полем?
В этих случаях, похоже, проблемы с кодом выше. Либо не все элементы будут связаны с одним и тем же полем, либо будут отображены несколько элементов с одним и тем же идентификатором.
Я изучаю это некоторое время. Я нашел много решений; однако все они либо не имеют интерактивной метки, либо требуют кучу пользовательского и/или нестандартного кодирования. Некоторые избегают использования RadioButtonFor/LabelFor полностью, выбирая вместо этого код необработанного HTML.
Кодирование необработанного HTML в порядке, но разве дизайнеры MVC не ожидали, что нам может понадобиться несколько переключателей для одного и того же поля? И, если бы они это сделали, как они намеревались его кодировать?
EDIT:
После изучения этого еще один код, приведенный ниже, является лучшим способом, который я нашел, чтобы закодировать радиокнопки. Этот код предполагает, что я определил перечисление для каждого из моих параметров радио.
@Html.RadioButtonFor(m => m.Gender, Gender.Male, new { id = "gender-male" })
@Html.LabelFor(m => m.Gender, Gender.Male.ToString(), new { @for = "gender-male" })
@Html.RadioButtonFor(m => m.Gender, Gender.Female, new { id = "gender-female" })
@Html.LabelFor(m => m.Gender, Gender.Female.ToString(), new { @for = "gender-female" })
Возможно, это лучшее, что я могу ожидать, но это все еще немного беспокоит меня.
-
Почему так много настроек для базовых вещей, таких как идентификаторы? Опять же, разве Microsoft не ожидала, что нам нужно несколько переключателей, связанных с одним и тем же полем?
-
Если имя переименования не совпадает с описанием, которое я хочу для метки радиокнопки, этот подход, похоже, не поддерживает атрибуты поля, такие как
[Display(Name = "")]
.
(Я думаю, правильная обработка нескольких флажков будет отложена на другой вопрос.)