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

时间:2009-09-23 21:08:19

标签: 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>

4 个答案:

答案 0 :(得分:9)

如果您的角色定义如下,那么您可以将多个角色与用户

相关联
[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);
    }
}

使用视图中的扩展方法更新复选框,不确定以下内容是否适合您的视图引擎。

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

答案 1 :(得分:3)

<for each="var r in Enum.GetValues(typeof(UserRole))">
    <label>
      <% if (r.Checked) { %>
        <input type="checkbox" checked="checked" />${r}
      <% } else { %>
        <input type="checkbox" />${r}
      <% } %>
    </label>
</for>

P.S。添加的语法适用于标准视图引擎,可能无法编译,但想法应该清楚。

答案 2 :(得分:2)

检查与模型角色的相等性,并在相等时将check设置为“checked”,否则设置为string.Empty。

<label>
    <input type="checkbox"
           name="Roles"
           value="${(int)r}"
           ${ Model.Role == r ? "checked='checked'" : string.Empty } />
    ${r}
</label>

答案 3 :(得分:1)

嘿,我实际上无法使用上述方法。将“已检查”属性的值设置为空字符串仍会导致IE中的已选中复选框。我的解决方案是添加一个HtmlHelper扩展名:

public static string SimpleCheckbox(this HtmlHelper helper, 
                                    string name, 
                                    string value, 
                                    bool isChecked)
{
    return String.Format("<input type=\"checkbox\" name=\"{0}\" value=\"{1}\" " + (isChecked ? "checked" : "") + "/>", name, value);
}

在标记中:

<%= Html.SimpleCheckbox("checkboxId", item.Id, item.IsSelected) %>