好的,我有一个基于角色的权限系统,并希望管理员能够编辑每个角色的权限。要做到这一点,我需要加载大量的复选框,但是我很难从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();
}
显然,我需要知道哪些盒子没有被检查,以及那些盒子。但是在返回值中因为整体(“真,假”),我无法确定哪个值与哪个复选框相关。
任何关于修复或预选替代方法的建议都会受到关注。
答案 0 :(得分: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 Checkbox Helper时要记住的主要事情是使用contains()来确定true或false。
答案 1 :(得分:0)
请务必查看SO上的this主题。