2012-09-04 87 views
3

我有这样的代码RadioButtonFor不绑定空值

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

谁能帮助我?

回答

3

看看HtmlHelper.RadioButtonFor重载:没有人使用布尔第三个参数作为“检查按钮,如果value == something”。第三个参数(当它存在时)就是在这里用于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为空在控制器中。

+0

感谢您的回复。 '@ H​​tml.RadioButtonFor(model => model.LivStato,null)'不起作用。我把'@ Html.RadioButtonFor(model => model。LivStato,-1)'并且在我的控制器中,我将-1更改为null。 – sara

+0

@sara ok,编辑为“正确”的答案! –

7

更新答案

哎呀,如果单选按钮,是不是第一次在列表我原来的答复没有工作。正如@ sohtimsso1970所指出的那样,单选按钮将具有一个检查属性,通常会导致它被选中,即使该值不为空除非在DOM后面有另一个选中的单选按钮,当然这会有如果true/false绑定的单选按钮来到null-bound之下。

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

@{ 
    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。


原来的答复:

使用下面的单选按钮将绑定到

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

是必需的checked属性,因此单选按钮,核对无误当视图模型属性为null。

+0

也可以使用'new {@checked = Model.LiveStato == null}' –

+0

这不起作用。这将使得无论Model.LiveStato是否有值都可以选择输入无线电。呈现的HTML是'',它产生与''完全相同的结果。 HTML中的checked属性并不关心输入的值(true或false)。单独存在属性会导致选择元素。 – sohtimsso1970

+0

@ sohtimsso1970 - 嘿,当然 - 感谢评论。在测试时,我订购了单选按钮Null,True,False。在这种情况下,由于最后选中的单选按钮将显示为选中状态(并且在MVC中也正确绑定)。我已经相应地更新了我的答案。 – ajbeaven