私はモデルのブールプロパティの値を反映する相互排他的なラジオボタンの正しいRazor構文を見つけようとしています。私のモデルにはこれがあります:
public bool IsFemale{ get; set; }
これを2つのラジオボタン(1つは「男性」、もう1つは「女性」)で表示したいと思いますが、これまで試したすべてがモデルのIsFemale
プロパティの実際の値を反映していません。現在、私はこれを持っています:
@Html.RadioButtonFor(model => model.IsFemale, !Model.IsFemale) Male
@Html.RadioButtonFor(model => model.IsFemale, Model.IsFemale) Female
これは、変更して更新した場合に値を正しく保持するようですが、正しい値をチェック済みとしてマークしません。これは馬鹿げたものだと確信していますが、行き詰まっています。
このようにしてみてください:
@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>