在forep MVC中将foreach中的项目与另一个foreach项目进行比较

时间:2017-09-13 10:17:04

标签: c# asp.net asp.net-mvc foreach

我有一个类似的课程:

public class AddingNewRole
{
    public List<LookUpRole> LookUpRoles { get; set; }
    public List<AddNewRole> UserRoles { get; set; }
}

public class AddNewRole
{
    public int RoleId { get; set; }
    public string RoleName { get; set; }
}

public class LookUpRole{
    public int LookUpRoleId { get; set; }
    public string RoleName { get; set; }
    public string RoleDescription { get; set; }
}

我在我的控制器中使用它将它传递给我的视图:

public ActionResult GetAccountRoles(int accountId)
{
    var am = new AdministrationManager();
    var result = am.GetAllRoles(accountId);
    return PartialView(result);
}

我希望在我的视图中列出所有LookUpRoles(实际上有4个 - &#34;管理员,访客,成员和安全&#34;)以及{{1 }}在LookUpRoleId中,意思是UserRole,应该检查它,如果没有,则应该取消选中该复选框。使用下面的代码,我可以获得LookUpRoles的列表,但是当它应该只包含1时,它的每一行都有2个复选框。 以下是我的内容:

LookUpRoleId == RoleId

我在哪里得到错误的逻辑或实现?谢谢。

1 个答案:

答案 0 :(得分:1)

以下应该做你想做的事:

@model IEnumerable<WebApplication3.Models.ViewModel.AddingNewRole>
<tbody>
@foreach (var item in Model)
{
    foreach (var v in item.LookUpRoles)
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => v.LookUpRoleId)
            </td>
            <td>
                @Html.DisplayFor(modelItem => v.RoleName)
            </td>           
            <td>
                <input id=@v.LookUpRoleId
                    @(item.UserRoles.Any(r => r.RoleId == v.LookUpRoleId) ? "checked=\"checked\"" : String.Empty)
                    class="use-this switch-toggle switch-flat-mini switch-toggle-flat" type="checkbox">
                <label for=@v.LookUpRoleId></label>
            </td>
        </tr>
    }
}
</tbody>

如果用户的任何角色是当前查找角色,则只添加checked="checked"