Я работаю над приложением ASP .NET Core и пытаюсь загрузить компонент представления внутри _LoginPartial. _LoginPartial был создан автоматически при создании нового проекта, и мой компонент представления называется UserNameViewComponent. Компонент вида должен получить имя пользователя вошедшего в систему и отобразить его в верхней части экрана.
Каждый раз, когда я вхожу, приложение страницы застревает на экране входа в систему, пока я не остановлю его. Я добавил точку останова в строку в _LoginPartial, которая вызывает компонент представления. Когда вызывается компонент представления, он успешно получает мое имя пользователя, но затем, когда он возвращается к _LoginPartial, он снова запускает ту же строку кода, чтобы вернуться к компоненту представления, и это происходит навсегда.
Блок кода в _LoginPartial, где вызывается компонент вида:
@if (SignInManager.IsSignedIn(User))
{
<li class="nav-item">
<a class="nav-link text-light" asp-area="Identity" asp-page="/Account/Manage/Index" title="Manage">@await Component.InvokeAsync("UserName")</a>
</li>
<li class="nav-item">
<form class="form-inline" asp-area="Identity" asp-page="/Account/Logout" asp-route-returnUrl="@Url.Action("Index", "Home", new { area = "" })">
<button type="submit" class="nav-link btn btn-link text-light">Logout</button>
</form>
</li>
}
UserNameViewComponent:
namespace Tangy.ViewComponents
{
public class UserNameViewComponent : ViewComponent
{
private readonly ApplicationDbContext _db;
public UserNameViewComponent(ApplicationDbContext db)
{
_db = db;
}
public async Task<IViewComponentResult> InvokeAsync()
{
var claimsIdentity = (ClaimsIdentity)this.User.Identity;
var claim = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier);
var userFromDb = await _db.Users.Where(u => u.Id == claim.Value).FirstOrDefaultAsync();
return View(userFromDb);
}
}
Default.cshtml:
@model Tangy.Models.ApplicationUser
@{
ViewData["Title"] = "Default";
Layout = "~/Views/Shared/_Layout.cshtml";
}
Hi @Model.FirstName @Model.LastName <i class="far fa-user"></i>
Кто-нибудь знает, что я здесь не так делаю?