【发布时间】:2015-03-18 23:46:59
【问题描述】:
我有一个模型如下
public partial class Approval
{
public bool IsApproved { get; set; }
}
在视图中渲染模型时,我使用的是 IsApproved 属性的单选按钮
@Html.RadioButtonFor(model => model.IsApproved, "Yes", htmlAttributes: new { @id = "Approve"})
@Html.Label("Yes", htmlAttributes: new { @style = "padding-right:10px;vertical-align:top" })
@Html.RadioButtonFor(model => model.IsApproved, "No", htmlAttributes: new { @id = "Reject", })
@Html.Label("No", htmlAttributes: new { @style = "padding-right:10px;vertical-align:top" })
提交时,我得到 ModelState.IsValid false 因为 IsApproved 是 bool 类型,我在 View 中传递字符串
如果我像下面这样更改单选按钮
@Html.RadioButtonFor(model => model.IsApproved, Model.IsApproved, htmlAttributes: new { @id = "Approve"})
@Html.RadioButtonFor(model => model.IsApproved, !Model.IsApproved, htmlAttributes: new { @id = "Reject", })
默认情况下,单选按钮会在我不想要的页面加载时被选中。
建议正确的方法
【问题讨论】:
-
令人困惑的是,您有 2 个控件用于同一属性。当然
IsApproved应该是CheckBoxFor -
我知道它应该是一个下拉,但要求是有单选按钮
-
值必须是“true”和“false”,它们绑定到
boolean(不是“yes”和“no”)。如果您不想选择按钮,则需要将属性设置为bool?(可为空)。而且你的“标签”不是真正的标签(它们与按钮没有关系——点击它们没有任何作用)