使用带有布尔值的Html.RadioButtonFor不写Checked =“Checked”

时间:2012-05-17 04:04:26

标签: asp.net-mvc-3

我在使用RadioButtonFor帮助器时遇到了问题。传入的值为true时,它不会在任一单选按钮中显示“检查”。当值为false时,它可以正常工作。

我从我正在处理的项目中复制了此代码并创建了一个示例应用程序,我能够复制该问题。如果我将值硬编码为true或false,它似乎有效,但是当我使用“!string.IsNullOrEmpty(allgroups)”时它不会。

从视图:

<div>
    @Html.RadioButtonFor(m => m.AllGroups, true) All Groups
    @Html.RadioButtonFor(m => m.AllGroups, false) Current Groups
</div>

来自ViewModel:

    public bool AllGroups { get; set; }

来自Controller:

public ActionResult Index(string allgroups)
{
    var model = new ProgramGroupIndexViewModel
      {
          AllGroups = !string.IsNullOrEmpty(allgroups)
      };
    return View(model);
}

从IE中的视图来源:

<div>
    <input id="AllGroups" name="AllGroups" type="radio" value="True" /> All Groups
    <input id="AllGroups" name="AllGroups" type="radio" value="False" /> Current Groups
</div>

当AllGroups的值为false时,从视图源开始(注意它有效):

<div>
    <input id="AllGroups" name="AllGroups" type="radio" value="True" /> All Groups
    <input checked="checked" id="AllGroups" name="AllGroups" type="radio" value="False" /> Current Groups
</div>

2 个答案:

答案 0 :(得分:2)

模型绑定变得混乱,因为您将action参数命名为与model属性相同。更改Index操作参数的名称,它应该有效。

public ActionResult Index(string showAllGroups)
{
    var model = new ProgramGroup
                    {
                        AllGroups = !string.IsNullOrEmpty(showAllGroups);
                    };
    return View(model);
}

答案 1 :(得分:-1)

如果你从模型返回bool然后没有必要检查uncheck明确mvc将自己做它只是写

<div>
    @Html.RadioButtonFor(m => m.AllGroups) 
    @Html.RadioButtonFor(m => m.AllGroups)
</div>

但是如果你想明确地做,那么

您应该使用以下语法来检查/取消选中

Html.RadioButtonFor(m => m.AllGroups, "DisplayText", new { @checked = "checked" })

在源代码中,您可以看到它为值未检查属性

设置了true / false

在你看来你可以写

@if(m.AllGroups)
{
  Html.RadioButtonFor(m => m.AllGroups, "DisplayText", new { @checked = "checked" })
}
else
{
   Html.RadioButtonFor(m => m.AllGroups, "DisplayText" })
}