You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 18:31:49