RadioButtonFor不绑定null值

sar*_*ara 3 asp.net-mvc-3

我有这个代码

@Html.RadioButtonFor(model => model.LivStato, 1, Model.LivStato == 1)
@Html.RadioButtonFor(model => model.LivStato, -1, Convert.ToString(Model.LivStato) == string.Empty)
Run Code Online (Sandbox Code Playgroud)

如果Model.LivStato == 1为true,则选中单选按钮.

我不明白为什么如果Convert.ToString(Model.LivStato) == string.Empty是真的,没有选中单选按钮

我也试试这个

@Html.RadioButtonFor(model => model.LivStato, -1, !Model.LivStato.HasValue)
Run Code Online (Sandbox Code Playgroud)

但是不行.

在模型中:

public short? LivStato { get; set; }
Run Code Online (Sandbox Code Playgroud)

谁能帮我?

ajb*_*ven 7

更新的答案

哎呀,如果单选按钮不是列表中的第一个,我的原始答案不起作用.正如@ sohtimsso1970所指出的那样,单选按钮会有一个checked属性,通常会导致它被选中,即使该值不为null,除非在DOM中稍后有另一个已检查的单选按钮,当然如果true/false-bound单选按钮低于null null.

考虑到这一点,这是一个更好的解决方案:

@{
    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>
Run Code Online (Sandbox Code Playgroud)

无论null上绑定单选按钮在DOM上的位置如何,这都将起作用,并且还会呈现正确的HTML.


原始答案:

使用以下单选按钮将绑定到null:

<%: Html.RadioButtonFor(model => model.LivStato, "", new { @checked = !Model.LiveStato.HasValue }) %>
Run Code Online (Sandbox Code Playgroud)

checked属性是必需的,因此当ViewModel属性为null时,将正确检查单选按钮.