在ASP.NET MVC中设置CheckBox的Checked属性

Mic*_*ook 4 c# asp.net-mvc spark-view-engine

我正在努力解决ASP.NET MVC中缺少CheckBoxList的问题.我已经达到了可以渲染Enum值列表的程度,但我仍然坚持如何根据我的模型设置checked属性 - 在这种情况下,是一个具有IList of Role实体的User实体.角色id对应于枚举值.

此示例使用Spark View Engine语法,但它在功能上与标准ASP.NET MVC视图引擎相同("$("与"<%="或"<%"相同)

<for each="var r in Enum.GetValues(typeof(UserRole))">
    <label><input type="checkbox" name="Roles" value="${(int)r}" checked="[How-The-Heck-To-I-Get-This?]" />${r}</label>
</for>
Run Code Online (Sandbox Code Playgroud)

Roh*_*est 9

如果您的角色定义如下,则可以将多个角色与用户关联

[Flags]
public enum UserRole
{        
    DataReader = 1,
    ProjectManager = 2,
    Admin = 4,
}
Run Code Online (Sandbox Code Playgroud)

通过添加简单的扩展方法,您可以检查角色是否包含目标角色

public static class RoleExtension
{
    public static bool HasRole(this UserRole targetVal, UserRole checkVal)
    {
        return ((targetVal & checkVal) == checkVal);
    }
}
Run Code Online (Sandbox Code Playgroud)

在视图中使用扩展方法更新复选框,不确定以下是否是视图引擎的正确方法.

<for each="var r in Enum.GetValues(typeof(UserRole))">
<label>
    <input 
       type="checkbox"
       name="Roles" 
       value="${(int)r}" 
       checked="${Model.Role.HasRole(r) ? "checked" : string.Empty}" />
</label>
Run Code Online (Sandbox Code Playgroud)