3

我有这个代码

@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; }

谁能帮我?

4

2 回答 2

7

更新的答案

糟糕,如果null单选按钮不是列表中的第一个,我的原始答案不起作用。正如@sohtimsso1970 所指出的,单选按钮会有一个选中的属性,即使值不为空,它通常也会被选中,除非稍后在 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 属性为空时正确检查单选按钮。

于 2014-02-27T02:36:06.850 回答
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 。

于 2012-09-04T13:16:51.560 回答