C# 在ASP.NET MVC中设置复选框的Checked属性
我试图解决ASP.NETMVC中缺少复选框列表的问题。我已经到了可以很好地呈现枚举值列表的地步,但是我一直在研究如何基于我的模型设置checked属性——在本例中,该模型是一个具有角色实体IList的用户实体。角色id对应于枚举值 此示例使用Spark View Engine语法,但其功能与标准ASP.NET MVC视图引擎相同(“$”)与“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
${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) %>