2009-11-25 93 views
5

好吧,我有一個基於角色的權限系統,希望管理員能夠編輯每個角色的權限。要做到這一點,我需要加載大量的複選框,但是我很努力從視圖中獲取返回數據。ASP.Net MVC - 處理多個複選框

請注意:我查了一下,發現了類似的問題,但至今還找不到解決方案。

<% 
    Html.BeginForm(); 

    string lastGroup = ""; 
    foreach (var CurPermission in Model) 
    { 

%> 
     <%=Html.CheckBox("Permissions", CurPermission.Checked, new { ID = CurPermission.PermissionId}) + " " + CurPermission.PermissionValue%> 

     <br /> 
<% 
    } 
    %> 
     <input type="submit" value="Submit" /> 
    <% 
    Html.EndForm(); 
%> 

和控制器,

[AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult EditPermissions(String[] Permissions) 
     { 
      foreach (var CurPermission in Permissions) 
      { 
       Debug.WriteLine(CurPermission); 
      } 

      return View(); 
     } 

很顯然,我需要知道哪些箱不檢查,以及是的人。但是在整個返回值(「true,false」)中,我無法確定哪個值與哪個複選框相關。

任何有關解決方法或預存替代方法的建議都將被評價。

回答

11

以下是我們用於將成員分配給項目的一些代碼片段,希望這可以幫助您!

在視圖中我們有:

<p> 
    <label> 
     Select project members:</label> 
    <ul> 
     <% foreach (var user in this.Model.Users) 
      { %> 
     <li> 
      <%= this.Html.CheckBox("Member" + user.UserId, this.Model.Project.IsUserInMembers(user.UserId)) %><label 
       for="Member<%= user.UserId %>" class="inline"><%= user.Name%></label></li> 
     <% } %></ul> 
</p> 

在控制器中,我們有:

// update project members 
foreach (var key in collection.Keys)  
{ 
    if (key.ToString().StartsWith("Member")) 
    { 
     int userId = int.Parse(key.ToString().Replace("Member", "")); 
     if (collection[key.ToString()].Contains("true"))  
      this.ProjectRepository.AddMemberToProject(id, userId); 
     else 
         this.ProjectRepository.DeleteMemberFromProject(id, userId); 
    } 
} 

最主要的HTML複選框助手工作時,要記住的是使用含有(),以確定對或錯。

+0

簡單和重點 - 謝謝。 – LiamB 2009-11-25 10:15:45

+0

如何在視圖模型中實現IsUserInMembers? – 2010-11-10 16:06:15