好的,我有一个基于角色的权限系统,并希望管理员能够编辑每个角色的权限.要做到这一点,我需要加载大量的复选框,但是我很难从View中获取返回数据
请注意:我环顾四周,我发现了类似的问题,但截至目前尚无法找到解决方案.
<% 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(); }
显然我需要知道哪些盒子没有被检查,以及那些盒子.但是在返回值中因为整体(“真,假”),我无法确定哪个值与哪个复选框相关.
任何关于修复或预选的替代方法的建议都会受到关注.
解决方法
以下是我们用于将成员分配给项目的一些代码片段,希望这可以帮助您解决问题!
在视图中我们有:
<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 CheckBox Helper时要记住的主要事情是使用contains()来确定true或false.