单选按钮呈现为“已检查=已检查”,不确定来源

时间:2012-12-03 23:09:32

标签: jquery html asp.net-mvc

我有一个包含8个不同单选按钮组的页面(“是/否”按钮组)。最初我已经将html编码为'No'按钮进行渲染,但现在我需要渲染而不选择任何按钮。

我删除了'checked = checked'并刷新了但仍然选择了NO按钮。我再次刷新,清除缓存,并在不同的浏览器上运行无济于事。我正在寻找帮助找到可能的原因。

我的MVC代码:

@Html.RadioButtonFor(m => m.IsFelon, true, new { @class = "commentBox RadioIf" })
    <label for="PersonModel_Felon">Yes</label>
@Html.RadioButtonFor(m => m.IsFelon, false, new { @class = "commentBox" })
    <label for="PersonModel_Felon">No</label>

它如何呈现:

<input class="commentBox" data-val="true" data-val-required="The ChildAbusePast field is required." id="ChildAbusePast" name="ChildAbusePast" type="radio" value="True" />
   <label for="HistoryModel_ChildAbusePast">Yes</Label>
<input checked="checked" class="commentBox" id="ChildAbusePast" name="ChildAbusePast" type="radio" value="False" />
   <label for="HistoryModel_ChildAbusePast">No</Label>

只有其他事情触及这个是一些jquery:

$(document).ready(function () {
        $("input.commentBox").click(function () {
            if ($(this).closest('div.editor-field2').children('input:checked').val() == "True") {
               $(this).closest('div.formQuestion').children('div.hidden').slideDown(800);
          } else {
               $(this).closest('div.formQuestion').children('div.hidden').slideUp("fast");
         }
        });
    });

2 个答案:

答案 0 :(得分:1)

如果你没有初始化IsFelon,那么默认情况下,它将被设置为“False”,这是布尔类型对象的本质。

另一方面,如果你想在默认情况下取消选择无线电,那么你不应该使用bool,你会想要使用“bool?”它将默认值设置为“null”,因此不会选择任何无线电。

答案 1 :(得分:0)

模型的IsFelon属性是否有值?如果它是标准布尔值,它会。因此,当您将该属性映射到值为False的单选按钮时,MVC会识别它们匹配并将按钮设置为checked

我能想到的最简单的解决方案是不将这些单选按钮映射到模型属性,而只是检索这些值并在回发时以编程方式在控制器中设置模型属性。您还可以考虑使IsFelon成为可以为空的属性,但在MVC中使用可空属性可能涉及一些摆弄。