2012-05-09 4 views
46

Sto tentando di trovare la sintassi del rasoio corretta per i pulsanti di scelta reciproca che riflettono entrambi il valore di una proprietà booleana sul mio modello. Il mio modello ha questo:MVC4: due pulsanti di opzione per una singola proprietà del modello booleano

public bool IsFemale{ get; set; } 

Vorrei visualizzare questo con due pulsanti di opzione, un "maschio" e l'altro "femminile", ma tutto quello che ho provato finora non ha rispecchiato il valore effettivo del IsFemale proprietà sul modello. Attualmente, ho questo:

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

Questo sembra persistere il valore correttamente se cambio e aggiornamento, ma non segna il valore corretto come controllato. Sono sicuro che sia qualcosa di stupido, ma sono bloccato.

+0

Qual è la cultura della tua app? Stai usando localizzato .net? Poiché non riesco a riprodurre il problema e poiché la soluzione di Darin ha funzionato, forse questo è un problema di impostazione della cultura ... – nemesv

+0

Attualmente non sto impostando la lingua, quindi presumo che stia usando l'impostazione predefinita della macchina. –

+0

Interessante ... È strano perché mi aspetterei anche che funzioni come provato in effetti nella mia riproduzione ... – nemesv

risposta

87

Prova in questo modo:

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

Ed ecco il codice completo:

Modello:

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

Controller:

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ì, funziona. Ciò mi sembra del tutto contro-intuitivo, dal momento che il sovraccarico di 'RadioButtonFor' specifica quel parametro come' valore dell'oggetto '. Grazie mille! –

+0

Ottima risposta. Anche cliccando su Works for Label. –

+0

nel mio caso il valore predefinito è falso e se non faccio clic su radio per cambiare, quindi su invio ricevo true. @ Html.RadioButtonFor (m => m.IsWorkDefaultAddress, "true", new {id = "default-work"}) @ Html.RadioButtonFor (m => m.IsWorkDefaultAddress, "false", new {id = "default-home"}) – Adeem

0

In MVC 6 (ASP.NET Core) questo può essere ottenuto anche con aiutanti tag:

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