在默认 Index.cshtml RazorPages Asp.Net Core 2.1.0 中再添加一个 属性

Add one more property to default Index.cshtml RazorPages Asp.Net Core 2.1.0

我在一个项目中使用 Asp.Net Core 2.1.0,我想在其中添加一个额外的 property 到默认脚手架 Index.cshtml 页面。

这是我的实体请建议。

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

    public ICollection<UserRole> UserRole { get; set; }
}
public class User
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public string UserName { get; set; }
    public string Password { get; set; }
    public string MobileNumber { get; set; }
    public string Email { get; set; }

    public ICollection<UserRole> UserRole { get; set; }
}
public class UserRole
{    
    public int Id { get; set; }
    public string UserName { get; set; }
    public int RoleId { get; set; }

    [ForeignKey("RoleId")]
    public Role Role { get; set; }
    [ForeignKey("UserName")]
    public User User { get; set; }
}

现在,默认脚手架 Index.cshtml 显示 RoleIDUserName,因为我想再添加一个列,即 RoleName,可在 Role entity.

列表应该是 RoleID, RoleName, UserName

这是我的脚手架页面模型。

public class IndexModel : PageModel
{
    private readonly Test.Models.TestContext _context;

    public IndexModel(Test.Models.TestContext context)
    {
        _context = context;
    }

    public IList<UserRole> UserRole { get;set; }

    public async Task OnGetAsync()
    {
        UserRole = await _context.UserRole
            .Include(u => u.Role)
            .Include(u => u.User).ToListAsync();
    }
}

请在不影响任何其他页面的情况下帮助我,例如Edit, Detail, Delete.

更新:Index.cshtml

中的代码
    @page
@model Test.Pages.UserRoles.IndexModel

@{
    ViewData["Title"] = "Index";
}

<h2>Index</h2>

<p>
    <a asp-page="Create">Create New</a>
</p>
<table class="table">
    <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.UserRole[0].Role)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.UserRole[0].User)
            </th>
            <th></th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model.UserRole)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.Role.RoleId)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.User.UserName)
                </td>
                <td>
                    <a asp-page="./Edit" asp-route-id="@item.Id">Edit</a> |
                    <a asp-page="./Details" asp-route-id="@item.Id">Details</a> |
                    <a asp-page="./Delete" asp-route-id="@item.Id">Delete</a>
                </td>
            </tr>
        }
    </tbody>
</table>

您可以尝试在 index.chtml

中使用 @item.Role.RoleName

备注

我建议您使用不同的 ViewModel class 为每个 view 携带数据而不是 ModelContext 因为 ModelContext 负责将 DB 数据属性获取到映射器 Db表架构。

ViewModel负责承载show数据

这里有一个link希望能帮到你