如何在ASP.NET Core列表视图中返回名称而非ID
问题描述
我的代码在列表视图中返回的是userid、categoryid、locationid而非对应的名称,希望返回名称而非ID。
相关代码
服务层获取方法
public async Task<IEnumerable<JobViewModel>> GetAllJobsAsync() { var jobs = _appDbContext.Jobs .Include(j => j.Category) .Include(j => j.Location) .Include(j => j.User) .ToList(); return jobs.Select(job => new JobViewModel(job)); }
API控制器方法
public async Task<IActionResult> ListOfJobs() { var list = await _jobService.GetAllJobsAsync(); return Ok(list); }
JobViewModel 定义
public JobViewModel(JobClass job) { JobId = job.JobId; JobTitle = job.JobTitle; Description = job.Description; Requirement = job.Requirement; Experience = job.Experience; Salary = job.Salary; DatePosted = job.DatePosted; Deadline = job.Deadline; UserId = job.Id; CategoryId = job.CategoryId; LocationId = job.LocationId; } public Guid JobId { get; set; } public string JobTitle { get; set; } public string Description { get; set; } public string Requirement { get; set; } public string Experience { get; set; } public int Salary { get; set; } public DateTime DatePosted { get; set; } public DateTime Deadline { get; set; } public Guid UserId { get; set; } public int LocationId { get; set; } public int CategoryId { get; set; } public IEnumerable<CategoryViewModel> Categories { get; set; } public IEnumerable<LocationViewModel> Locations { get; set; }
解决方案
你已经通过Include加载了关联的Category、Location、User实体,但当前JobViewModel只提取了ID字段,没有使用这些关联实体的名称属性。只需要修改JobViewModel,添加对应的名称属性,并在构造函数中从关联实体取值即可。
修改后的JobViewModel示例
public JobViewModel(JobClass job) { JobId = job.JobId; JobTitle = job.JobTitle; Description = job.Description; Requirement = job.Requirement; Experience = job.Experience; Salary = job.Salary; DatePosted = job.DatePosted; Deadline = job.Deadline; // 替换为关联实体的名称属性,根据你的实际实体调整字段名 UserName = job.User?.Name; CategoryName = job.Category?.Name; LocationName = job.Location?.Name; } public Guid JobId { get; set; } public string JobTitle { get; set; } public string Description { get; set; } public string Requirement { get; set; } public string Experience { get; set; } public int Salary { get; set; } public DateTime DatePosted { get; set; } public DateTime Deadline { get; set; } // 添加名称属性,若仍需要ID字段可保留原属性 public string UserName { get; set; } public string CategoryName { get; set; } public string LocationName { get; set; } public IEnumerable<CategoryViewModel> Categories { get; set; } public IEnumerable<LocationViewModel> Locations { get; set; }
说明
- 使用
?.空值运算符,避免关联实体为null时引发空引用异常 - 请将代码中的
Name替换为你数据库实体中实际存储名称的属性(比如UserName、CategoryTitle等) - 若业务需要保留ID字段,可同时保留
UserId、CategoryId等属性,按需选择
内容的提问来源于stack exchange,提问作者Daniel. F
相关产品推荐
相关产品推荐

