如何在 asp.net core .NET6(Razor 页面)中的单个 cshtml 中显示来自多个表/模型的数据
Posted
技术标签:
【中文标题】如何在 asp.net core .NET6(Razor 页面)中的单个 cshtml 中显示来自多个表/模型的数据【英文标题】:How to display data from multiple tables/models in a single cshtml in asp.net core .NET6 (Razor pages) 【发布时间】:2022-01-07 15:17:59 【问题描述】:我是 asp.net 核心剃须刀页面的新手。我需要在单个页面上显示来自多个表的数据。我只能从页面访问一个模型类。你能帮我弄清楚如何从一个页面(cshtml)访问多个表。
我需要在 Class-> create.cshtml 中显示 User_Profile(表/模型)(默认情况下,类附加到类表)。 以下是 Class -> create.cshtml
中的代码 @page
@model TestProject.Pages.Class.CreateModel
@
ViewData["Title"] = "Create";
Layout = "~/Pages/Shared/_Layout.cshtml";
<div class="row">
<div class="col-md-4">
<form method="post">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
@*<label asp-for="Class.ID" class="control-label"></label>
<input asp-for="Class.ID" class="form-control" />*@
@*<label asp-for="User_Profile.ID" class="control-label"></label>
<select asp-for="User_Profile.ID" class="form-control" >
<option value="">Select Student</option>
<option value="Female">Female</option>
<option value="Male">Male</option>
</select>
<span asp-validation-for="Class.ID" class="text-danger"></span>*@
</div>
<div class="form-group">
<label asp-for="Class.Description" class="control-label"></label>
<input asp-for="Class.Description" class="form-control" />
<span asp-validation-for="Class.Description" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.userprofile[0].FirstName)
</th>
<th>
@Html.DisplayNameFor(model => model.userprofile[0].LastName)
</th>
<th>
@Html.DisplayNameFor(model => model.userprofile[0].ProfileType)
</th>
<th>
@Html.DisplayNameFor(model => model.userprofile[0].Status)
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.User_Profile)
<tr>
<td>
@Html.DisplayFor(modelItem => item.FirstName)
</td>
<td>
@Html.DisplayFor(modelItem => item.LastName)
</td>
<td>
@Html.DisplayFor(modelItem => item.ProfileType)
</td>
<td>
@Html.DisplayFor(modelItem => item.Status)
</td>
</tr>
</tbody>
</table>
</form>
</div>
</div>
@section Scripts
@await Html.RenderPartialAsync("_ValidationScriptsPartial");
我在编写 Model.User_profile 时遇到错误。例如:
@foreach (var item in Model.User_Profile)
非常感谢您的帮助。
谢谢!
【问题讨论】:
您可以将多个类附加到一个创建视图的类。欢迎来到 S.O.请提供不在图像中的代码。进行搜索并提出一个具体的问题,而不是那么广泛。请阅读指南和如何提问的教程 嗨@LeandroBardelli,我希望我的问题现在更清楚了。如果您需要更多信息,请告诉我。 通常你会有一个带有应用程序/业务逻辑层的项目。该层将提供您的页面请求的数据。因此,正是在这一层中,您需要将不同的数据对象“粘合”在一起,以创建一个可以在视图中显示的类。希望这会有所帮助 代码什么时候报错的?提交表单后还是直接运行代码?能否提供您的页面模型和错误信息? 【参考方案1】:型号
public class Class
public int ID get; set;
public string Description get; set;
public class User_Profile
public int Id get; set;
public string FirstName get; set;
public string LastName get; set;
public string ProfileType get; set;
public string Status get; set;
页面模型
public class CreateModel : PageModel
public Class cla get; set;
public List<User_Profile> up = new List<User_Profile>()
//I write these hard-code just for testing convenience
new User_Profile()
FirstName ="mike",
LastName ="A",
ProfileType="a",
Status="aaa"
,
new User_Profile()
FirstName ="Lucy",
LastName ="B",
ProfileType="b",
Status="YES"
,
new User_Profile()
FirstName ="Nacy",
LastName ="C",
ProfileType="c",
Status="NO"
;
public void OnGet()
public void OnPost(Class cla)
页面浏览量
<div class="row">
<div class="col-md-4">
<form method="post">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="cla.Description" class="control-label"></label>
<input asp-for="cla.Description" class="form-control" />
<span asp-validation-for="cla.Description" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.up[0].FirstName)
</th>
<th>
@Html.DisplayNameFor(model => model.up[0].LastName)
</th>
<th>
@Html.DisplayNameFor(model => model.up[0].ProfileType)
</th>
<th>
@Html.DisplayNameFor(model => model.up[0].Status)
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.up)
<tr>
<td>
@Html.DisplayFor(modelItem => item.FirstName)
</td>
<td>
@Html.DisplayFor(modelItem => item.LastName)
</td>
<td>
@Html.DisplayFor(modelItem => item.ProfileType)
</td>
<td>
@Html.DisplayFor(modelItem => item.Status)
</td>
</tr>
</tbody>
</table>
</form>
</div>
</div>
@section Scripts
@await Html.RenderPartialAsync("_ValidationScriptsPartial");
页面
当你输入一些值并点击提交按钮时,你可以在 Post 方法中接收它。
当你想从数据库中获取价值时,你可以像这样改变一些代码:
DbContext
public class Pagecontext : DbContext
public Pagecontext(DbContextOptions<Pagecontext> options) : base(options)
public DbSet<User_Profile> UpTable get; set;
页面模型
public class CreateModelModel : PageModel
public readonly Pagecontext _db;
public CreateModelModel(Pagecontext db)
_db = db;
public Class cla get; set;
public List<User_Profile> up get; set;
public async Task OnGetAsync()
up= await _db.UpTable.ToListAsync();
public async Task OnPostAsync(Class cla)
//.......
【讨论】:
嗨@Xinran,我收到了NullException。因为我需要从您在以下行中硬编码它们的数据库中获取值: public List以上是关于如何在 asp.net core .NET6(Razor 页面)中的单个 cshtml 中显示来自多个表/模型的数据的主要内容,如果未能解决你的问题,请参考以下文章
.NET6-Asp.Net Core webapi -从零开始的webapi项目
.NET6-Asp.Net Core webapi -从零开始的webapi项目
.NET6-Asp.Net Core webapi -从零开始的webapi项目
如何使用具有最小 API .Net 6 的 Asp.net core Identity 运行迁移(第一次迁移)
使用 Azure 地理冗余 (RA-GRS) 表存储时,如何更新 ASP.NET Core 中的 TableServiceClient 以指向次要区域?