【问题标题】:Recommended approach to show a custom user property in a view?在视图中显示自定义用户属性的推荐方法?
【发布时间】:2021-08-13 17:54:43
【问题描述】:

我正在尝试构建一个简单的帮助台应用程序。在这个应用程序中,当创建并显示票证时,我想显示创建用户的名字。我正在尝试解决如何以最好的方式做到这一点。

我扩展了 ApplicationUser 类并添加了 FirstName 和 LastName 列。我还在我的工单表中创建了两个外键,一个用于创建工单的用户,一个用于分配给该工单的代理。因此,当显示工单时,我需要同时显示创建者和代理的名字 + 姓氏,而不是他们的 UserId。

这是我的 ApplicationUser 类

public class ApplicationUser : IdentityUser
    {
        public string FirstName { get; set; }

        public string LastName { get; set; }

        public ICollection<Ticket> Users { get; set; }
        public ICollection<Ticket> Agents { get; set; }
    }

这是我的模型:

公共课票 { 公共 int ID { 获取;放; } 公共字符串主题{获取;放; } 公共字符串正文 { 获取;放; } 公共 int 状态 { 获取;放; } 公共字符串用户 ID { 获取;放; } 公共字符串 AgentId { 获取;放; } 公共日期时间创建{获取;放; } 公共日期时间 LastUpdated { 获取;放; } 公共日期时间?完成{得到;放; } 公共布尔静音{得到;放; } [外键(“用户ID”)] 公共虚拟应用程序用户 TicketUser { 获取;放; } [ForeignKey("AgentId")] 公共虚拟 ApplicationUser TicketAgent { get;放; } }

这是我的 DbContext:

公共 DbSet 门票 { 获取;放; } 受保护的覆盖无效 OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity() .HasOne(m => m.TicketUser) .WithMany(t => t.Users) .HasForeignKey(m => m.UserId) .OnDelete(DeleteBehavior.Restrict); modelBuilder.Entity() .HasOne(m => m.TicketAgent) .WithMany(t => t.Agents) .HasForeignKey(m => m.AgentId) .OnDelete(DeleteBehavior.Restrict); }

这是显示特定工单的控制器操作:

    [HttpGet]
    public ViewResult Tickets(int id)
    {
        TicketDetailsViewModel ticketDetailsViewModel = new TicketDetailsViewModel()
        {
            Ticket = _ticketRepo.GetTicket(id)
        };


        return View(ticketDetailsViewModel);
    }

这是我的视图模型:

public class TicketDetailsViewModel
{
    public Ticket Ticket { get; set; }
}

现在,如果我这样做,我可以在视图中显示全名:

@inject 用户管理器用户管理器; @{ var ticketUser = (await userManager.FindByIdAsync(Model.Ticket.UserId)).FirstName + " " + (await userManager.FindByIdAsync(Model.Ticket.UserId)).LastName; }

但我不确定这是否是一个好方法。我想了解实现这一目标的最佳方法是什么。

非常感谢。

【问题讨论】:

    标签: asp.net-core entity-framework-core asp.net-identity


    【解决方案1】:

    你可以在你的 ApplicationUser 中定义一个 _fullname ,然后如果 firstname 和 lastname 都存在,你可以直接调用 Fullname,比如:

    public class ApplicationUser : IdentityUser
    {
        private string _fullName;  //new property
        public string FirstName { get; set; }
        public string LastName { get; set; }
    
        [NotMapped]
        public string FullName
        {
            get
            {
                return _fullName = this.FirstName + "." + this.LastName;
            }
            set
            {
                _fullName = value;
            }
        }
    
        public ICollection<Ticket> Users { get; set; }
        public ICollection<Ticket> Agents { get; set; }
    }
    

    在视图中,只需调用 FullName:

    @{
    var ticketUser = (await userManager.FindByIdAsync(Model.Ticket.UserId)).FullName;
    }
    

    【讨论】:

      猜你喜欢
      • 2017-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多