背景
我有一个包含三个布尔值的模型
public class PageDataModel
{
public bool setting1 { get; set; }
public bool setting2 { get; set; }
public bool setting3 { get; set; }
}
如果一个值为 true,则其他值必定为 false。
在我看来,我显示了三个单选按钮:
我的观点的 Razor 代码:
<div class="row">
<div class="radio">
@if (Model.Setting1)
{
@Html.RadioButtonFor(m => m.Setting1, "Setting1", new { Checked = "checked", Name = "Group"})
}
else
{
@Html.RadioButtonFor(m => m.Setting1, "Setting1", new { Name = "Group"})
}
@Html.Label("Setting1")
</div>
<div class="radio">
@if (Model.Setting2)
{
@Html.RadioButtonFor(m => m.Setting2, "Setting2", new { Checked = "checked", Name = "Group" })
}
else
{
@Html.RadioButtonFor(m => m.Setting2, "Setting2", new { Name = "Group"})
}
@Html.Label("Setting2")
</div>
<div class="radio">
@if (Model.Setting3)
{
@Html.RadioButtonFor(m => m.Setting3, "Setting3", new { Checked = "checked", Name = "Group" })
}
else
{
@Html.RadioButtonFor(m => m.Setting3, "Setting3", new { Name = "Group"})
}
@Html.Label("Setting3")
</div>
<button type="submit" class="btn btn-default">Save</button>
</div>
在我的控制器中,我返回一个设置为 true 的模型:
var model = new PageDataModel
{
Setting1 = true,
Setting2 = false,
Setting3 = false
};
return View(model);
这工作正常,页面加载时选中了“设置 1”单选按钮。
问题
当我提交表单时,发布的模型包含所有错误值,无论选中哪个单选按钮。
我尝试将值从“setting1”更改为 true/false,但这对返回的数据没有影响。
我相当确定我没有正确设置绑定,但我不确定哪里出了问题。
我发现的所有其他示例都是将两个单选按钮绑定到一个布尔值(例如,一对是/否单选按钮绑定到一个布尔值)。我可以更改代码以使用一个 int 属性,但我想使用 bool 来解决这个问题。
我究竟做错了什么?我在这里滥用单选按钮吗?