在ASP.NET MVC中设置CheckBox的Checked属性
我正在尝试解决ASP.NET MVC中缺少CheckBoxList的问题。 我已经达到了可以渲染Enum值列表的程度,但我仍然坚持如何根据我的模型设置checked属性 – 在这种情况下,是一个具有IList of Role实体的User实体。 角色id对应于枚举值。
此示例使用Spark View Engine语法,但它在function上与标准ASP.NET MVC视图引擎相同(“$(”与“<%=”或“<%”相同)
如果您的角色定义如下,则可以将多个角色与用户关联
[Flags] public enum UserRole { DataReader = 1, ProjectManager = 2, Admin = 4, }
通过添加简单的扩展方法,您可以检查角色是否包含目标角色
public static class RoleExtension { public static bool HasRole(this UserRole targetVal, UserRole checkVal) { return ((targetVal & checkVal) == checkVal); } }
在视图中使用扩展方法更新复选框,不确定以下是否是视图引擎的正确方法。
PS添加的语法是针对标准视图引擎,可能无法编译,但想法应该清楚。
检查与模型角色的相等性,并在相等时设置为“checked”,否则设置为string.Empty。
嘿,我实际上还没有能够使用上述方法。 将“已检查”属性的值设置为空字符串仍会导致IE中的已选中复选框。 我的解决方案是添加一个HtmlHelper扩展:
public static string SimpleCheckbox(this HtmlHelper helper, string name, string value, bool isChecked) { return String.Format("", name, value); }
并在标记中:
<%= Html.SimpleCheckbox("checkboxId", item.Id, item.IsSelected) %>