MVC单选按钮选中了一个

时间:2015-02-11 22:38:23

标签: c# asp.net-mvc asp.net-mvc-3

由于某些原因我有单选按钮,即使检查了第一个按钮,也总是在表单页面上显示最后一个按钮。为什么?我该如何解决这个问题?

@Html.RadioButtonFor(model => model.IsSatisFied, Satisfaction.Not, new { @checked = "true" }) 
@Html.RadioButtonFor(model => model.IsSatisFied, Satisfaction.Maybe, new { @checked = "false" })  
@Html.RadioButtonFor(model => model.IsSatisFied, Satisfaction.Yes, new { @checked = "false" })  

3 个答案:

答案 0 :(得分:2)

不要设置checked属性。 @checked = "true"@checked = "false"(以及checkedchecked="checked"checked="anything")都设置了checked属性。在读取DOM时,检查第一个,然后检查第二个,最后检查最后一个。

如果propery的值为IsSatisFiedSatisfaction.Maybe,则会选择第二个单选按钮(这就是模型绑定的工作原理)

答案 1 :(得分:0)

您正在使用格式错误的HTML。将某些内容标记为已检查的正确方法是

{ @checked = "checked" }

并且根本不包括未经检查的单选按钮的checked属性。

答案 2 :(得分:0)

HTML specification说:

  

如果出现以下任何现象,如果元素的检查状态在发生后为真,则同一单选按钮组中所有其他元素的检查状态必须设置为false :< / p>      

      
  • 元素的检查状态设置为true(无论出于何种原因)。
  •   
  • 设置,更改或删除元素的名称属性。
  •   
  • 元素的表单所有者更改。
  •   

因此,当在页面上解析HTML时,如果多个无线电是checked,那么将始终选择最后一个。因此,您只想通过设置checked="checked"

来设置一个已检查的属性
@Html.RadioButtonFor(
    model => model.IsSatisFied, 
    Satisfaction.Not, 
    new { @checked = "checked" }) 
@Html.RadioButtonFor(model => model.IsSatisFied, Satisfaction.Maybe)  
@Html.RadioButtonFor(model => model.IsSatisFied, Satisfaction.Yes)