C# 如何在我的网站中联接数据库表?
这是我的密码: albums.cshtmlC# 如何在我的网站中联接数据库表?,c#,asp.net,entity-framework,asp.net-core,razor-pages,C#,Asp.net,Entity Framework,Asp.net Core,Razor Pages,这是我的密码: albums.cshtml @page @using Project.Models @model Project.Pages.AlbumsModel @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers <div class="row"> <h1 class="display-2">Albums</h1> <table class
@page
@using Project.Models
@model Project.Pages.AlbumsModel
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
<div class="row">
<h1 class="display-2">Albums</h1>
<table class="table">
<thead class="thead-inverse">
<tr>
<th>Album ID</th>
<th>Artist ID</th>
<th>Artist name</th>
<th>Album title</th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (Album album in Model.Albums)
{
<tr>
<td>@album.AlbumId</td>
<td>@album.ArtistId</td>
<td>@Html.DisplayFor(modelArtists => album.Artist.Name)</td>
<td>@album.Title</td>
<td><a asp-page="/Albums/Details" asp-route-id="@album.AlbumId">Details</a></td>
<td><a asp-page="/Albums/Edit" asp-route-id="@album.AlbumId">Edit</a></td>
<td><a asp-page="/Albums/Delete" asp-route-id="@album.AlbumId">Delete</a></td>
<td><a asp-page="/Albums/AlbumTracks" asp-route-id="@album.AlbumId">Tracks</a></td>
</tr>
}
</tbody>
</table>
</div>
<div class="row">
<p>Enter a title & ArtistID for a new album: </p>
<form method="POST">
<div><input asp-for="Album.Title" /></div>
<div><input asp-for="Album.ArtistId" /></div>
<input type="submit" />
</form>
</div>
<div>
<a asp-page="/Index">Home</a>
</div>
@page
@using Project.Models
@model Project.Pages.AlbumTracksModel
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
<div class="row">
<h1 class="display-2">Tracks</h1>
<table class="table">
<thead class="thead-inverse">
<tr>
<th>Track name</th>
<th></th>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (Track track in Model.Tracks)
{
<tr>
<td>@track.TrackId</td>
<td>@track.Name</td>
</tr>
}
</tbody>
</table>
</div>
@* <div class="row">
<p>Enter a name & TrackID for a new track: </p>
<form method="POST">
<div><input asp-for="Track.Name" /></div>
<div><input asp-for="Track.TrackId" /></div>
<input type="submit" />
</form>
</div> *@
<div>
<a asp-page="/Index">Home</a>
</div>
有什么建议吗?蒂亚
编辑:可以尝试:
foreach (var track in Model.Tracks)
{
if(item.AlbumID == Model.AlbumID)
{
<tr>
<td>@track.TrackId</td>
<td>@track.Name</td>
</tr>
}
}
我对这个还是有点陌生,所以希望它能起作用
目前,我正在AlbumTracks.cshtml中显示每个相册中的所有曲目,而不仅仅是用户在album.cshtml上选择的曲目
你确定你所描述的是正确的吗?使用以下代码显示所有相册中的所有曲目:
Tracks = db.Tracks.Include(a => a.Album);
我认为您需要的是,当单击albums.cshtml
中的tracks
链接时,可以显示所选专辑的曲目:
<td><a asp-page="/Albums/Album Tracks" asp-route-id="@album.AlbumId">Tracks</a></td>
AlbumTracks.cshtml:
@page
@using Project.Models
@model Project.Pages.AlbumTracksModel
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
<div class="row">
<h1 class="display-2">Tracks</h1>
<table class="table">
<thead class="thead-inverse">
<tr>
<th>Track name</th>
<th></th>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (Track track in Model.Tracks)
{
<tr>
<td>@track.TrackId</td>
<td>@track.Name</td>
</tr>
}
</tbody>
</table>
</div>
@page
@使用Project.Models
@模型Project.Pages.AlbumTracksModel
@addTagHelper*,Microsoft.AspNetCore.Mvc.TagHelpers
轨道
音轨名称
@foreach(Model.Tracks中的轨迹)
{
@track.TrackId
@音轨,名字
}
结果:
谢谢,但由于某些原因,我出现了错误“当前上下文中不存在名称“track”。你说的模型是指实体文件吗?Album.cs和Track.cs?或者上下文文件Chinook.cs?我又试了一次,但这一次我得到的“名称”项“在当前上下文中不存在”&“AlbumTracksModel”不包含“AlbumId”的定义,并且找不到可访问的扩展方法“AlbumId”,该扩展方法接受类型为“AlbumTracksModel”的第一个参数“您是否可以发布到github repo或源代码的链接?”?我的意思是将Id添加到album.cs和AlbumId添加到Track.cs。然后在PackageManager控制台中执行:添加迁移和更新数据库。这将向数据库中添加列,然后清空数据库并用新的测试数据填充,并通过将每个曲目的AlbumId设置为相册的相应Id将曲目与其相册链接,让我知道这是否有助于GitHub repo位于。需要说明的是,
AlbumId
已经作为Album表的主键和Tracks表的外键存在,因此我几乎完全确定不需要对数据库做任何进一步的操作。现在我正在使用Tracks=db.Tracks.Where(a=>a.AlbumId==id)来“拉”我需要的数据代码>。我认为这是正确的,因为登录页使用id
作为参数。但是我怎样才能让这些曲目真正显示在AlbumTracks.cshtml页面上呢?谢谢,但这里有一件或多件事情我还不太清楚。IDK你所说的“你确定你所描述的是正确的吗?”AlbumTracks.cshtml页面明确地显示了所有相册中的所有曲目。我已经用Tracks=db.Tracks.Where(a=>a.AlbumId==id)更新了AlbumTracks.cshtml.cs代码>。这就是表连接,对吗??但是现在我如何获得所选唱片集的曲目列表以实际显示在AlbumTracks.cshtml上?我不知道该用什么语法。这就是表格连接。你不知道使用什么语法是什么意思?只需使用Tracks=db.Tracks.Where(a=>a.AlbumId==id).Include(a=>a.Album)代码>在后端已经足够了。您的客户端使用:@foreach(Model.Tracks中的Track)
<代码>曲目
此处匹配后端曲目
。也就是说,它将读取后端数据并将其显示在AlbumTracks.cshtml中。你在项目中尝试过吗?我已经更新了AlbumTracks.cshtml。实际上它和你的一样。我想你可能没有时间在你的项目中测试我的代码。啊,太棒了,非常感谢。一开始我没有看到Tracks=db.Tracks.Include(a=>a.Album.Where(a=>a.AlbumId==id)的区别代码>。我以为我的版本也在做同样的事情,但由于某种原因我不明白它显然不是。再次感谢。
Tracks = db.Tracks.Include(a => a.Album);
<td><a asp-page="/Albums/Album Tracks" asp-route-id="@album.AlbumId">Tracks</a></td>
public class AlbumTracksModel : PageModel
{
private Chinook db;
public AlbumTracksModel(Chinook injectedContext)
{
db = injectedContext;
}
public IEnumerable<Track> Tracks { get; set; }
public void OnGetAsync(int id)
{
ViewData["Title"] = "Chinook Web Site - Tracks";
Tracks = db.Tracks.Include(a => a.Album).Where(a=>a.AlbumId==id);
}
}
@page
@using Project.Models
@model Project.Pages.AlbumTracksModel
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
<div class="row">
<h1 class="display-2">Tracks</h1>
<table class="table">
<thead class="thead-inverse">
<tr>
<th>Track name</th>
<th></th>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (Track track in Model.Tracks)
{
<tr>
<td>@track.TrackId</td>
<td>@track.Name</td>
</tr>
}
</tbody>
</table>
</div>