web-dev-qa-db-fra.com

MVC4: deux boutons radio pour une propriété de modèle booléen unique

J'essaie de trouver la syntaxe Razor correcte pour des boutons radio s'excluant mutuellement qui reflètent la valeur d'une propriété booléenne sur mon modèle. Mon modèle a ceci:

public bool IsFemale{ get; set; }

J'aimerais afficher ceci avec deux boutons radio, l'un "Male" et l'autre "Female", mais tout ce que j'ai essayé jusqu'à présent n'a pas reflété la valeur réelle de la propriété IsFemale sur le modèle. Actuellement, j'ai ceci:

@Html.RadioButtonFor(model => model.IsFemale, !Model.IsFemale) Male
@Html.RadioButtonFor(model => model.IsFemale, Model.IsFemale) Female

Cela semble conserver correctement la valeur si je modifie et met à jour, mais ne marque pas la valeur correcte comme étant cochée. Je suis sûr que c'est stupide, mais je suis coincé.

50
AJ.

Essayez comme ça:

@Html.RadioButtonFor(model => model.IsFemale, "false") Male
@Html.RadioButtonFor(model => model.IsFemale, "true") Female

Et voici le code complet:

Modèle:

public class MyViewModel
{
    public bool IsFemale { get; set; }
}

Manette:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View(new MyViewModel
        {
            IsFemale = true
        });
    }

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        return Content("IsFemale: " + model.IsFemale);
    }
}

Vue:

@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>
}
99
Darin Dimitrov

Dans MVC 6 (ASP.NET Core), cela peut également être réalisé avec des aides de balises:

<label>
    <input type="radio" asp-for="IsFemale" value="false" /> Male
</label>
<label>
    <input type="radio" asp-for="IsFemale" value="true" /> Female
</label>
3
Darren