2009-09-23 56 views
3

我試圖解決ASP.NET MVC中缺少CheckBoxList的問題。我已經到了可以呈現Enum值列表的地步了,但我堅持如何根據我的模型設置checked屬性 - 在本例中,這是一個具有IList Role實例的User實體。角色ID對應於枚舉值。在ASP.NET MVC中設置複選框的Checked屬性

這個例子是使用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> 
+0

我可能失去了一些東西,但你不能使用包含方法的角色列表上? model.Roles.Contains(r)? ='已檢查':'' – 2009-09-23 21:16:43

回答

8

如果你的角色是這樣定義的,那麼你可以將多個角色與用戶

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

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> 

PS添加的語法是標準的視圖引擎,可能無法編譯,但思路應該是清楚的。

2

與檢查模型以及一組檢查平等「檢查」時,等於和字符串。沒有時就空了。

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

嘿,我居然一直沒能得到上述方法的工作。將「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); 
} 

而在標記:

<%= Html.SimpleCheckbox("checkboxId", item.Id, item.IsSelected) %> 
相關問題