设置CheckBox的Checked属性在ASP.NET MVC(Setting the Check

2019-08-16 17:35发布

我试图解决缺乏在ASP.NET MVC中一个的CheckBoxList的。 我已经得到的地步,我可以使枚举值的列表就好了,但我卡在如何根据我的模型设定选中属性 - 在这种情况下是有作用的实体的一个IList用户实体。 角色ID的对应枚举值。

这个例子是使用Spark视图引擎的语法,但它的功能上等同于标准的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>

Answer 1:

如果您的角色是这样定义的,那么你可以关联与用户的多个角色

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



Answer 2:

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

PS添加的语法是标准的视图引擎,可能无法编译,但思路应该是清楚的。



Answer 3:

请与检查模型以及一套平等“检查”相等时和时的String.Empty不是。

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


Answer 4:

嘿嘿,我其实一直没能得到上述方法的工作。 一个“选中”属性的值设置为空字符串仍然导致在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) %>


文章来源: Setting the Checked property of a CheckBox in ASP.NET MVC