在视图中显示自定义用户 属性 的推荐方法?
Recommended approach to show a custom user property in a view?
我正在尝试构建一个简单的帮助台应用程序。在此应用程序中,当创建并显示工单时,我想显示创建用户的名字。我正在尝试以最好的方式解决如何做到这一点。
我扩展了 ApplicationUser class 并添加了 FirstName 和 LastName 列。我还在我的工单 table 中创建了两个外键,一个用于创建工单的用户,另一个用于分配给该工单的代理。因此,当显示票证时,我需要同时显示创建者和代理人的名字 + 姓氏,而不是他们的 UserId。
这是我的 ApplicationUser class
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; }
}
这是我的模型:
public class Ticket
{
public int Id { get; set; }
public string Subject { get; set; }
public string Body { get; set; }
public int Status { get; set; }
public string UserId { get; set; }
public string AgentId { get; set; }
public DateTime Created { get; set; }
public DateTime LastUpdated { get; set; }
public DateTime? Completed { get; set; }
public bool Muted { get; set; }
[ForeignKey("UserId")]
public virtual ApplicationUser TicketUser { get; set; }
[ForeignKey("AgentId")]
public virtual ApplicationUser TicketAgent { get; set; }
}
这是我的 DbContext:
public DbSet Tickets { get; set; }
protected override void 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 UserManager userManager;
@{
var ticketUser = (await userManager.FindByIdAsync(Model.Ticket.UserId)).FirstName + " " + (await userManager.FindByIdAsync(Model.Ticket.UserId)).LastName;
}
但我不确定这是否是一个好方法。我想了解实现此目标的最佳方法。
非常感谢。
你可以在你的 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;
}
我正在尝试构建一个简单的帮助台应用程序。在此应用程序中,当创建并显示工单时,我想显示创建用户的名字。我正在尝试以最好的方式解决如何做到这一点。
我扩展了 ApplicationUser class 并添加了 FirstName 和 LastName 列。我还在我的工单 table 中创建了两个外键,一个用于创建工单的用户,另一个用于分配给该工单的代理。因此,当显示票证时,我需要同时显示创建者和代理人的名字 + 姓氏,而不是他们的 UserId。
这是我的 ApplicationUser class
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; }
}
这是我的模型:
public class Ticket { public int Id { get; set; } public string Subject { get; set; } public string Body { get; set; } public int Status { get; set; } public string UserId { get; set; } public string AgentId { get; set; } public DateTime Created { get; set; } public DateTime LastUpdated { get; set; } public DateTime? Completed { get; set; } public bool Muted { get; set; } [ForeignKey("UserId")] public virtual ApplicationUser TicketUser { get; set; } [ForeignKey("AgentId")] public virtual ApplicationUser TicketAgent { get; set; } }
这是我的 DbContext:
public DbSet Tickets { get; set; } protected override void 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 UserManager userManager; @{ var ticketUser = (await userManager.FindByIdAsync(Model.Ticket.UserId)).FirstName + " " + (await userManager.FindByIdAsync(Model.Ticket.UserId)).LastName; }
但我不确定这是否是一个好方法。我想了解实现此目标的最佳方法。
非常感谢。
你可以在你的 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;
}