向默认 Index.cshtml RazorPages ASP.NET Core 2.1.0 添加一个属性

问题描述 投票:0回答:1

我在一个项目中使用 ASP.NET Core 2.1.0,我想向默认脚手架

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
显示
RoleID
UserName
,因为我想再添加一列,即
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>
c# asp.net-core asp.net-core-mvc razor-pages
1个回答
1
投票

您可以尝试在您的

@item.Role.RoleName
 中使用 
index.chtml

注意

我建议您使用不同的

ViewModel
类来承载每个
view
的数据,而不是 ModelContext,因为 ModelContext 负责将
DB
数据属性获取到映射器数据库表模式。

ViewModel
负责承载显示数据。

这是一个链接希望可以帮助你

© www.soinside.com 2019 - 2024. All rights reserved.