2009-11-25 70 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