在默认 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
显示 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>
您可以尝试在 index.chtml
中使用 @item.Role.RoleName
备注
我建议您使用不同的 ViewModel
class 为每个 view
携带数据而不是 ModelContext 因为 ModelContext 负责将 DB
数据属性获取到映射器 Db表架构。
ViewModel
负责承载show数据
这里有一个link希望能帮到你
我在一个项目中使用 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
显示 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>
您可以尝试在 index.chtml
@item.Role.RoleName
备注
我建议您使用不同的 ViewModel
class 为每个 view
携带数据而不是 ModelContext 因为 ModelContext 负责将 DB
数据属性获取到映射器 Db表架构。
ViewModel
负责承载show数据
这里有一个link希望能帮到你