2012-05-09 5 views
46

ich versucht bin die richtige Razor-Syntax für sie gegenseitig ausschließende Optionsfelder zu finden, die sowohl den Wert einer Booleschen Eigenschaft auf meinem Modell reflektieren. Mein Modell hat dies:MVC4: Zwei Radiobuttons für eine einzelne boolean Modell Eigenschaft

public bool IsFemale{ get; set; } 

Ich möchte diese Tasten mit zwei Funk angezeigt werden, ein „Mann“ und die andere „Female“, aber alles, was ich versucht habe bisher nicht den tatsächlichen Wert des reflektierten IsFemale Eigenschaft auf dem Modell. Derzeit habe ich dies:

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

Dieser Wert richtig zu bestehen scheint, wenn ich und Update ändern, aber nicht den korrekten Wert markieren, wie geprüft. Ich bin sicher, das ist etwas Dummes, aber ich stecke fest.

+0

Was App-Kultur? Verwenden Sie lokalisierte .net? Weil ich nicht Ihr Problem repro kann und weil Darins Lösung gearbeitet vielleicht ist dies eine Kultur Einstellung Ausgabe ... – nemesv

+0

Ich bin derzeit nicht die Kultur einstellen, so nehme ich es, die Maschine Standard ist verwenden. –

+0

Interessant ... Es ist nur seltsam, weil ich es auch erwarten würde arbeiten, wie Sie in der Tat versucht, es in meinem repro tut ... – nemesv

Antwort

87

Versuchen wie folgt aus:

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

Und hier ist der vollständige Code:

Modell:

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); 
    } 
} 

Ausblick:

@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

Ja, das funktioniert. Das scheint völlig kontraintuitiv zu mir, da die Überlastung für 'RadioButtonFor' diese Parameter als' Objekt value' angibt. Vielen Dank! –

+0

Große Antwort. Funktioniert auch beim Label-Klick. –

+0

in meinem Fall Standardeinstellung ist falsch und wenn ich Radio nicht klicken dann auf Änderungen einreichen i wahr erhalten. @ Html.RadioButtonFor (m => m.IsWorkDefaultAddress, "true", neue {ID = "Standard-Arbeit"}) @ Html.RadioButtonFor (m => m.IsWorkDefaultAddress, "false", neue {ID = "Standard-Startseite"}) – Adeem

0

In MVC 6 (ASP.NET Core) dies auch mit dem Tag Helfer erreicht werden kann:

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