我在使用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>
答案 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" })
}