2012-05-09 6 views
46

Estoy intentando encontrar la sintaxis Razor correcta para botones de opción mutuamente exclusivos que reflejan el valor de una propiedad booleana en mi modelo. Mi modelo tiene esta:MVC4: Dos botones de opción para una sola propiedad de modelo booleano

public bool IsFemale{ get; set; } 

me gustaría mostrar esto con dos botones de radio, un "macho" y el otro "femenino", pero todo lo que he probado hasta ahora no ha reflejado el valor real de la IsFemale propiedad en el modelo. Actualmente, tengo esto:

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

Esto parece persistir el valor correctamente si cambio y actualización, pero no marca el valor correcto como equipaje. Estoy seguro de que esto es algo estúpido, pero estoy atascado.

+0

¿Qué es la cultura de su aplicación? ¿Estás usando .net localizado? Debido a que no puedo reproducir su problema y porque la solución de Darin funcionó, quizás este sea un problema de configuración cultural ... – nemesv

+0

Actualmente, no estoy configurando la referencia cultural, así que supongo que está usando la máquina predeterminada. –

+0

Interesante ... Es extraño porque también esperaba que funcionara como lo intentaste, de hecho lo hace en mi repro ... – nemesv

Respuesta

87

Trate de esta manera:

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

Y aquí está el código completo:

Modelo:

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

controlador:

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

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

Vista:

@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> 
} 
+1

Sí, eso funciona. Eso me parece totalmente contrario a la intuición, ya que la sobrecarga de 'RadioButtonFor' especifica ese parámetro como' object value'. ¡Muchas gracias! –

+0

Gran respuesta. Funciona para que Label haga clic también. –

+0

en mi caso el valor predeterminado es falso y si no hago clic en la radio para cambiar, entonces al enviarlo, recibo verdadero. @ Html.RadioButtonFor (m => m.IsWorkDefaultAddress, "true", new {id = "default-work"}) @ Html.RadioButtonFor (m => m.IsWorkDefaultAddress, "falso", nuevo {id = "default-home"}) – Adeem

0

En MVC 6 (ASP.NET Core) esto también se puede lograr con helpers de etiquetas:

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