簡體   English   中英

ASP.NET CORE 5.0 Identity 顯示當前登錄用戶

[英]ASP.NET CORE 5.0 Identity Display current logged in user

我試圖在Index Page中顯示哪個用戶提交ticket 在我的 Model 我添加屬性

 public int? UserId { get; set; }

 public virtual ApplicationUser ApplicationUser { get; set; }

在 controller 我有類似的東西

 [HttpPost]
        [ValidateAntiForgeryToken]
        public IActionResult Upsert(TicketVM ticketVM)
        {
            if (ModelState.IsValid)
            {
                if (ticketVM.Ticket.Id == 0)
                {
                    ticketVM.Ticket.Status = TicketStatus.Otvoren.ToString();
                    _unitOfwork.Ticket.Add(ticketVM.Ticket);
                }
                else
                {
                    _unitOfwork.Ticket.Update(ticketVM.Ticket);
                }
                _unitOfwork.Save();
                return RedirectToAction(nameof(Index));
            }
            return View(ticketVM);
        }

到目前為止,我嘗試添加類似這樣的內容

var userEmail = User.FindFirstValue(ClaimTypes.Email);
ticketVM.Ticket.ApplicationUser.Name = userEmail;

這是我收到錯誤消息的問題

Object reference not set to an instance of an object.

所以我的問題是,如何在用戶登錄並提交票證后在 IndexPage 中分配我需要顯示他/她的用戶名或 email 地址。

應用程序用戶.cs

 public class ApplicationUser : IdentityUser
    {
        
        [Required]
        [Display(Name = "Ime")]
        public string Name { get; set; }

        [Required]
        [Display(Name = "Adresa")]
        public string StreetAddress { get; set; }

        [Required]
        [Display(Name = "Grad")]
        public string City { get; set; }

        [Required]
        [Display(Name = "Postanski broj")]
        public string PostalCode { get; set; }

        public int? ClientId { get; set; }
        [ForeignKey("ClientId")]
        public Client Client { get; set; }

        [NotMapped]
        public string Role { get; set; }
    }

該錯誤表明 ApplicationUser 是NULL 因此,當您嘗試訪問 Name 屬性時,它會引發該錯誤。 假設它是現有用戶,您可以這樣做:

ticketVM.Ticket.ApplicationUser = _dbContext.Users.FirstOrDefault(u => u.Email == userEmail);

您還可以使用 class 內置的 UserManager,它也具有 FindByEmail() 方法。 但關鍵是,首先使用 userEmail 從數據庫中獲取 ApplicationUser。 如果它是新用戶,那么您需要創建一個新的 ApplicationUser 才能訪問 Name 屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM