4

我在使用 RadioButtonFor 助手时遇到问题。当传入的值为 true 时,它​​不会在任一单选按钮中显示“检查”。当值为 false 时,它​​工作得很好。

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

从视图:

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

从视图模型:

    public bool AllGroups { get; set; }

从控制器:

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>
4

2 回答 2

2

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

public ActionResult Index(string showAllGroups)
{
    var model = new ProgramGroup
                    {
                        AllGroups = !string.IsNullOrEmpty(showAllGroups);
                    };
    return View(model);
}
于 2012-05-17T15:11:55.737 回答
-1

如果您从模型返回 bool,则无需明确检查取消选中 mvc 将自行完成,只需编写

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

但是,如果您想明确地这样做

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

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

在源代码中,您可以看到它为 value not checked 属性设置 true / false

在你看来你可以写

@if(m.AllGroups)
{
  Html.RadioButtonFor(m => m.AllGroups, "DisplayText", new { @checked = "checked" })
}
else
{
   Html.RadioButtonFor(m => m.AllGroups, "DisplayText" })
}
于 2012-05-17T04:39:51.007 回答