C# 如何在foreach循环外显示查询结果
我有一个名为AllTracks.htmlcs.cs的文件,该文件将获取每个具有“AlbumId”行的曲目,该行与我的“Albums表中的“AlbumId”行相同 基本上,一旦执行了查询,它将只在AllTracks.htmlcs页面上加载正确的数据。它将加载轨迹ID、名称和运行时。基本上显示所选唱片集的曲目列表 我试图在页面顶部放置一个标题,显示相册名称,但在正常的@foreach循环之外,我似乎找不到正确的语法。有人能帮我调试代码吗 AllTracks.htmlcs代码段(标题应位于第1行)C# 如何在foreach循环外显示查询结果,c#,entity-framework,entity-framework-core,C#,Entity Framework,Entity Framework Core,我有一个名为AllTracks.htmlcs.cs的文件,该文件将获取每个具有“AlbumId”行的曲目,该行与我的“Albums表中的“AlbumId”行相同 基本上,一旦执行了查询,它将只在AllTracks.htmlcs页面上加载正确的数据。它将加载轨迹ID、名称和运行时。基本上显示所选唱片集的曲目列表 我试图在页面顶部放置一个标题,显示相册名称,但在正常的@foreach循环之外,我似乎找不到正确的语法。有人能帮我调试代码吗 AllTracks.htmlcs代码段(标题应位于第1行) @
@相册标题应该在这里
创建新轨道
@Html.DisplayName(“曲目ID”)
@Html.DisplayName(“名称”)
@Html.DisplayName(“运行时”)
编辑|删除
@foreach(Model.TracksList中的var项)
{
@DisplayFor(modelItem=>item.TrackId)
@DisplayFor(modelItem=>item.Name)
@{string min;}
@{
TimeSpan ts=TimeSpan.FromMillics(item.Millics);
}
@ts.ToString(@“mm\:ss”)
相关信息|
编辑
|
删除
}
AllTracks.htmlcs.cs代码段
public class AllTracksModel : PageModel
{
DatabaseContext _Context;
public AllTracksModel(DatabaseContext databasecontext)
{
_Context = databasecontext;
}
public List<Track> TracksList { get; set; }
public void OnGet(int? id)
{
var data = (from album in _Context.tracks
where album.AlbumId == id
select album).ToList();
TracksList = data;
}
public ActionResult OnGetDelete(int? id)
{
if (id != null)
{
var data = _Context.tracks.ToList();
_Context.Remove(data);
_Context.SaveChanges();
}
return RedirectToPage("/AllTricks");
}
}
公共类AllTracksModel:PageModel
{
数据库上下文(DatabaseContext)上下文;;
公共AllTracksModel(DatabaseContext DatabaseContext)
{
_上下文=数据库上下文;
}
公共列表TracksList{get;set;}
公共网络(int?id)
{
var data=(来自_Context.tracks中的相册)
其中album.AlbumId==id
选择相册).ToList();
TracksList=数据;
}
公共行动结果OnGetDelete(int?id)
{
如果(id!=null)
{
var data=_Context.tracks.ToList();
_删除(数据);
_SaveChanges();
}
返回重定向Topage(“/AllTricks”);
}
}
您似乎没有将唱片集名称加载到发送到页面进行渲染的数据中。我可能会这样做:
public string AlbumName {get;set;}
public List<Track> TracksList { get; set; }
public void OnGet(int? id)
{
//don't make confusing variable names. Don't call the items in tracks "album";they are not albums,they're tracks
var data = (from track in _Context.tracks.Include(t=>t.Album)
where track.AlbumId == id
select track).ToList();
TracksList = data;
AlbumName = TracksList.First().Album.Name; //might have to adjust this to be the real property on Album
}
当你在团队中工作时,你可能有一个前端的DEV,他们维护HTML并使它看起来很好,而且他们可能不喜欢在他们所做的事情中看到他们不理解的代码块,所以限制页面中的C的数量有助于人类关注的分离以及技术上的一个/P> 一旦您厌倦了编写将数据从db实体复制到视图模型实体并返回(TrackModel)的代码,请查看automapper库
public string AlbumName {get;set;}
public List<Track> TracksList { get; set; }
public void OnGet(int? id)
{
//don't make confusing variable names. Don't call the items in tracks "album";they are not albums,they're tracks
var data = (from track in _Context.tracks.Include(t=>t.Album)
where track.AlbumId == id
select track).ToList();
TracksList = data;
AlbumName = TracksList.First().Album.Name; //might have to adjust this to be the real property on Album
}
//don't select db entity for page
select track).ToList();
//have a dedicated class for page.. TrackModel is just a class with a few properties, little or no logic
select new TrackModel{
Title=track.Title,
RunTime=TimeSpan.FromMilliseconds(track.Milliseconds) //could also do string conversion here too
}).ToList();