Я искал способ использовать атрибут value в помощнике тега радиокнопки, чтобы сообщить, была ли кнопка отмечена или нет, вместо использования отдельного поля для выбора. Я нашел ответ от @Shyju на related question. Я использую модифицированный пример этого ответа, чтобы показать, что я имею в виду.Можно ли установить атрибут атрибута атрибута тега радиокнопки как «checked» в html?
Скажем, у меня есть ViewModel
public class ExampleViewModel
{
public int Id { get; set; }
public string UserName { get; set; }
public List<UserRole> Roles { get; set; }
}
public class UserRole
{
public int Id { get; set; }
public string RoleName { get; set; }
public bool IsSelected { get; set; }
}
, который инициализируется в контроллере
public IActionResult Example()
{
var vm = new ExampleViewModel
{
Roles = new List<UserRole>
{
new UserRole {Id = 1, RoleName = "Admin"},
new UserRole {Id = 2, RoleName = "Editor"},
new UserRole {Id = 3, RoleName = "Reader"}
}
};
return View("Example",vm);
}
и используется в целях
<form asp-controller="Example" asp-action="Save">
<label class="label">User name</label>
<div class="col-md-10">
<input asp-for="UserName" type="text" />
</div>
<label class="label">Select a Role</label>
<div class="col-md-10">
<div class="btn-group" data-toggle="buttons">
@for (var i = 0; i < Model.Roles.Count; i++)
{
<label class="btn btn-default">
<input asp-for="Roles[i].Id" type="radio" value="@Model.Roles[i].Id" />
<input asp-for="Roles[i].IsSelected" type="radio" value=true />
@Model.Roles[i].RoleName
</label>
}
</div>
</div>
<input type="submit" />
</form>
То, что я хотел бы достичь с этим, является чтобы прочитать поле UserRole.IsSlect в методе почты контроллера, чтобы узнать, был ли конкретный UserRole проверено или нет. Это решение работает, если пользователь проверяет только одну кнопку и не изменяет выбор. Если пользователь изменяет выбор на другой, то все значения UserRole, которые коснулся пользователь, будут иметь поле IsSelected как значение true.
Возможно ли каким-либо образом установить значение IsSelected в HTML, чтобы отображать только кнопку, которая проверяется при отправке формы или для нее требуется функция JavaScript?
Спасибо Стивен, ваш ответ очень ясно и информативно. Я пытаюсь разработать решение, в котором я мог бы установить критерии выбора динамически в представлении. Иногда выбор будет эксклюзивным только (переключатель), и иногда допускается использование нескольких вариантов (флажок). Тогда я мог бы использовать ту же модель в обоих случаях. У меня было ощущение, что это будет невозможно, но я подумал, что попрошу здесь, чтобы быть уверенным. – Yuhis
Совсем нет. Это был хороший ответ на мой вопрос, который, вероятно, был слишком точным. Неявно это решило мою проблему. – Yuhis
@StephenMuecke В моем случае я размещал дополнительный атрибут 'name = RoleType' внутри' 'и всегда получал значение радио но после прочтения вашего сообщения я понял, что при использовании помощника тега мне не нужно использовать атрибут name, так как 'asp-for' автоматически генерирует нам атрибуты имени и идентификатора. После прочтения вашего сообщения я удалил атрибут name и он работает сейчас. Спасибо за то, что он поместил весь необходимый код и кратко объяснил его. – nam