ラジオボタンに手動でname
を指定しないでください。 name="optradio"
を削除すると、タグヘルパーが名前を発行することがわかります。独自の名前を指定すると、Model Binderはプロパティを正しく処理しません。
これは実際にはPropertyTwo
の2つ目のプロパティを追加し、ソースコードを見てコントローラをデバッグすることで確認できます。あなたはPropertyTwo
は、各ラジオボタンのObject_PropertyTwo
の名前を持ち、かつ(Object.PropertyOne
は依然としてバインドに失敗したのに対し、)それが正常に結合することがわかります:
モデル
public class MyObject
{
public string PropertyOne { get; set; }
public string PropertyTwo { get; set; }
}
public class MyModel
{
public MyObject Object { get; set; }
}
コントローラ
public ActionResult Foo()
{
return View(new MyModel() { Object = new MyObject() });
}
[HttpPost]
public ActionResult Foo(MyModel model)
{
return View();
}
@{
ViewData["Title"] = "Test Page";
}
@model MyModel
<form asp-controller="Home" asp-action="Foo" method="post">
<div id="RadioButtonGroup">
<label asp-for="Object.PropertyOne" class="radio-inline">
<input asp-for="Object.PropertyOne" value="A" type="radio" name="optradio" >Option One
</label>
<label asp-for="Object.PropertyOne" class="radio-inline">
<input asp-for="Object.PropertyOne" value="B" type="radio" name="optradio" >Option Two
</label>
<label asp-for="Object.PropertyOne" class="radio-inline">
<input asp-for="Object.PropertyOne" value="C" type="radio" name="optradio" >Option Three
</label>
<label asp-for="Object.PropertyOne" class="radio-inline">
<input asp-for="Object.PropertyOne" value="D" type="radio" name="optradio" >Option Four
</label>
</div>
<div id="RadioButtonGroup">
<label asp-for="Object.PropertyOne" class="radio-inline">
<input asp-for="Object.PropertyTwo" value="A" type="radio">Option One
</label>
<label asp-for="Object.PropertyOne" class="radio-inline">
<input asp-for="Object.PropertyTwo" value="B" type="radio">Option Two
</label>
<label asp-for="Object.PropertyOne" class="radio-inline">
<input asp-for="Object.PropertyTwo" value="C" type="radio">Option Three
</label>
<label asp-for="Object.PropertyOne" class="radio-inline">
<input asp-for="Object.PropertyTwo" value="D" type="radio">Option Four
</label>
</div>
<input type="submit" />
</form>
うわあ、詳細でよく説明された回答をいただきありがとうございます!私はカスタム名を削除することができたし、あなたが言ったように完璧に働いた。これらの小さなものは時には捉えにくく、見逃しやすいので、もう一度感謝します。私はそれを理解しようと多くの無駄な時間を費やしていたでしょう。 – Daath
name属性は、name属性と同じ値を持つグループにすべてのラジオボタンをグループ化するために存在します。私がその名前を明示的に設定して、ラジオボタンがどのグループに属しているかを知っていなければ、asp.netコアはそれをどのように知っていますか? – Elisabeth