MVC4: две радиокнопки для одного логического свойства модели
Я пытаюсь найти правильный синтаксис Razor для взаимоисключающих переключателей, которые отражают значение логического свойства в моей модели. Моя модель имеет это:
public bool IsFemale{ get; set; }
Я хотел бы отобразить это с помощью двух переключателей, одного "Мужской", а другого "Женский", но все, что я до сих пор пробовал, не отражало действительного значения IsFemale
Свойство по модели. В настоящее время у меня есть это:
@Html.RadioButtonFor(model => model.IsFemale, !Model.IsFemale) Male
@Html.RadioButtonFor(model => model.IsFemale, Model.IsFemale) Female
Это, кажется, сохраняет значение правильно, если я изменяю и обновляю, но не отмечает правильное значение как проверенное. Я уверен, что это что-то глупое, но я застрял.
3 ответа
Попробуйте вот так:
@Html.RadioButtonFor(model => model.IsFemale, "false") Male
@Html.RadioButtonFor(model => model.IsFemale, "true") Female
И вот полный код:
Модель:
public class MyViewModel
{
public bool IsFemale { get; set; }
}
контроллер:
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new MyViewModel
{
IsFemale = true
});
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
return Content("IsFemale: " + model.IsFemale);
}
}
Посмотреть:
@model MyViewModel
@using (Html.BeginForm())
{
@Html.RadioButtonFor(model => model.IsFemale, "false", new { id = "male" })
@Html.Label("male", "Male")
@Html.RadioButtonFor(model => model.IsFemale, "true", new { id = "female" })
@Html.Label("female", "Female")
<button type="submit">OK</button>
}
В MVC 6 (ASP.NET Core) этого также можно добиться с помощью помощников тегов:
<label>
<input type="radio" asp-for="IsFemale" value="false" /> Male
</label>
<label>
<input type="radio" asp-for="IsFemale" value="true" /> Female
</label>
До сентября 2022 г.
Логический переключатель с использованием: .NET Framework 4.7.2, MVC 5.2.7, Bootstrap 5.1.3.
Модель
public class TheViewModel
{
public bool IndustrialDegree { get; set; }
}
Вид
<div class="col-4 col-md-2 mb-3">
@Html.Label("Industrial Degree", new { @class = "d-block form-label" })
<div class="btn-group d-flex" role="group" aria-label="Basic radio toggle button group">
@Html.RadioButtonFor(Model => Model.IndustrialDegree, true, new { @class = "btn-check", @id = "IndustrialDegreeTrue" })
@Html.Label("IndustrialDegreeTrue", "Yes", new { @class = "btn btn-outline-primary" })
@Html.RadioButtonFor(Model => Model.IndustrialDegree, false, new { @class = "btn-check", @id = "IndustrialDegreeFalse" })
@Html.Label("IndustrialDegreeFalse", "No", new { @class = "btn btn-outline-primary" })
</div>
</div>
Обратите внимание, что я возвращаю контроллеру чистое логическое значение.
Результат
Он работает в обоих направлениях.
Это то, что вы увидите на контроллере при отладке модели представления.