从使用外键链接的表中获取数据

时间:2018-02-12 09:26:20

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

我有两个表User和Roles

这是用户模型

 public partial class User
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public User()
    {
        this.Roles = new HashSet<Role>();
    }
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Role> Roles { get; set; }
}

这里是角色模型

public partial class Role
{
    [Key]
    public int Id { get; set; }
    public string RoleName { get; set; }
    [ForeignKey("User")]
    public Nullable<int> User_Id { get; set; }

    public virtual User User { get; set; }
}

我需要在“查看用户名”和“他的角色名称”中显示

在控制器中我有这个方法

 public ActionResult Index()
    {
        return View(db.Users.Include(x => x.Roles).ToList());
    }

并在查看此

@foreach (var item in Model) {
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.Name)
    </td>


    <td>
        @Html.ActionLink("Edit", "Edit", new { id = item.Id }) |
        @Html.ActionLink("Details", "Details", new { id = item.Id }) |
        @Html.ActionLink("Delete", "Delete", new { id = item.Id })
    </td>
</tr>

}

我尝试显示RoleName,如

<td>
            @Html.DisplayFor(modelItem => item.Roles.Name)
        </td>

但它看不到RoleName属性。

我如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

User类中有一组roles属性,这意味着一个用户可以拥有多个角色。如果您的目的是为一个用户提供多个角色,则可能需要包含另一个foreach循环,如下所示

enter image description here

如果您打算每个用户拥有一个角色,则可以使用以下代码

enter image description here

答案 1 :(得分:0)

根据您的模型,每个用户都有一组角色。 我们需要循环角色才能显示RoleName。

{{1}}

答案 2 :(得分:0)

在用户模型中,您已将角色声明为集合,这意味着列表。从您的代码中,您在每个用户中都有角色列表。 如果每个用户只有一个角色,则可以更改代码,如:

<td>
            @Html.DisplayFor(modelItem => item.Roles.First().RoleName)
        </td>

这将显示角色列表中的FirstRole名称。

或者你可以像用户一样循环角色