Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ASP.NET MVC中设置复选框的Checked属性_C#_Asp.net Mvc_Spark View Engine - Fatal编程技术网

C# 在ASP.NET MVC中设置复选框的Checked属性

C# 在ASP.NET MVC中设置复选框的Checked属性,c#,asp.net-mvc,spark-view-engine,C#,Asp.net Mvc,Spark View Engine,我试图解决ASP.NETMVC中缺少复选框列表的问题。我已经到了可以很好地呈现枚举值列表的地步,但是我一直在研究如何基于我的模型设置checked属性——在本例中,该模型是一个具有角色实体IList的用户实体。角色id对应于枚举值 此示例使用Spark View Engine语法,但其功能与标准ASP.NET MVC视图引擎相同(“$”)与“ ${r} ${r} 另外,添加的语法适用于标准视图引擎,可能无法编译,但思路应该清晰。检查与模型角色的相等性,并在相等时将checked设置为“chec

我试图解决ASP.NETMVC中缺少复选框列表的问题。我已经到了可以很好地呈现枚举值列表的地步,但是我一直在研究如何基于我的模型设置checked属性——在本例中,该模型是一个具有角色实体IList的用户实体。角色id对应于枚举值

此示例使用Spark View Engine语法,但其功能与标准ASP.NET MVC视图引擎相同(“$”)与“

${r}
${r}

另外,添加的语法适用于标准视图引擎,可能无法编译,但思路应该清晰。

检查与模型角色的相等性,并在相等时将checked设置为“checked”,在不相等时设置为空

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

${r}

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

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


嘿,实际上我还无法让上述方法发挥作用。将“checked”属性的值设置为空字符串仍然会导致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);
}
公共静态字符串SimpleCheckbox(此HtmlHelper帮助程序,
字符串名,
字符串值,
布尔(已检查)
{
返回String.Format(“”,名称,值);
}
在标记中:

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

我可能遗漏了一些内容,但您不能使用角色列表上的Contains方法吗?model.Roles.Contains(r)?=“选中”:”
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) %>