我有这段代码
@Html.RadioButtonFor(model => model.LivStato, 1, Model.LivStato == 1)
@Html.RadioButtonFor(model => model.LivStato, -1, Convert.ToString(Model.LivStato) == string.Empty)
如果Model.LivStato == 1
为真,则选中单选按钮。
我不明白为什么如果Convert.ToString(Model.LivStato) == string.Empty
为真,则不检查单选按钮
我也试试这个
@Html.RadioButtonFor(model => model.LivStato, -1, !Model.LivStato.HasValue)
但不起作用。
在模型中:
public short? LivStato { get; set; }
任何人都可以帮助我吗?
答案 0 :(得分:7)
更新回答
哎呀,如果 null 单选按钮不是列表中的第一个,我的原始答案不起作用。正如@ sohtimsso1970所指出的那样,单选按钮会有一个checked属性,通常会导致它被选中,即使该值不是null ,除非在DOM 中有另一个已检查的单选按钮,当然,如果真/假绑定单选按钮低于空值,则会出现。
考虑到这一点,这是一个更好的解决方案:
@{
var dict = new Dictionary<string, object>();
if (!Model.LivStato.HasValue) { dict.Add("checked", "checked"); }
}
<label>@Html.RadioButtonFor(model => model.LivStato, "", dict) Null</label>
<label>@Html.RadioButtonFor(model => model.LivStato, 1) +1</label>
<label>@Html.RadioButtonFor(model => model.LivStato, -1) -1</label>
无论DOM上的空值绑定单选按钮位于何处,它都可以正常工作,并且还可以呈现正确的HTML。
原始回答:
使用以下单选按钮将绑定到 null :
<%: Html.RadioButtonFor(model => model.LivStato, "", new { @checked = !Model.LiveStato.HasValue }) %>
需要checked
属性,以便在ViewModel属性为null时正确检查单选按钮。
答案 1 :(得分:3)
查看HtmlHelper.RadioButtonFor
重载:没有人使用布尔第三参数作为“检查按钮,如果值==某事”。第三个参数(当它存在时)仅适用于htmlAttributes。
http://msdn.microsoft.com/en-us/library/ee830415%28v=vs.108%29
如果你的firstLine有效,那只是因为你使用1
作为第二个参数(Model.LivStato == 1
没有做任何事情)。
您可以尝试(未经测试)
@Html.RadioButtonFor(model => model.LivStato, 1)
@Html.RadioButtonFor(model => model.LivStato, -1)
并在控制器中将-1更改为null。