在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) %>