【发布时间】:2023-03-18 20:35:02
【问题描述】:
背景
我有一个包含三个布尔值的模型
public class PageDataModel
{
public bool setting1 { get; set; }
public bool setting2 { get; set; }
public bool setting3 { get; set; }
}
如果一个值为真,则其他值必须为假。
在我看来,我正在显示三个单选按钮:
我认为的 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>
在我的控制器中,我返回了一个设置 1 设置为 true 的模型:
var model = new PageDataModel
{
Setting1 = true,
Setting2 = false,
Setting3 = false
};
return View(model);
这可以正常工作,页面加载时选中了“设置 1”单选按钮。
问题
当我提交表单时,发布的模型包含所有错误值,无论选中哪个单选按钮。
我尝试将值从“setting1”更改为真/假,但这对返回的数据没有影响。
我很确定我没有正确设置绑定,但我不确定我哪里出错了。
我发现的所有其他示例都是将两个单选按钮绑定到一个布尔值(例如,一对是/否单选按钮绑定到一个布尔值)。我可以更改代码以使用一个 int 属性,但我想使用 bools 来解决这个问题。
我做错了什么?我在这里误用了单选按钮吗?
【问题讨论】:
-
一个属性只有一个单选按钮是没有意义的。您需要为每个属性设置 2 个单选按钮,一个带有
value="true"和一个带有value="false"(并删除所有if块) -@Html.RadioButtonFor(m => m.Setting1, true) @Html.RadioButtonFor(m => m.Setting1, false) -
我很确定我在这里使用了错误的控件,只是想看看是否可以通过这种方式解决它。单选按钮是否被选中(真/假),当时对我来说是有意义的。如果块有点混乱,但这仍然处于 PoC 阶段。一旦我得到它的工作,我会整理它们。
-
所有属性为假的原因是您的单选按钮有
value="Setting1"、value="Setting2"等不能绑定到bool,因此这些值是它们的默认值(false) -
这是有道理的。如果选中,有没有办法将值绑定到?
-
RadioButtonFor()方法会自动执行此操作。根据我之前的cmets中的代码,如果值为true,将检查第一个按钮,否则将检查第二个。
标签: c# asp.net-mvc razor