Использование модели для извлечения любых данных выглядит очень плохо в случае шаблона MVC. Лучший способ, если вы не хотите трогать контроллер - используйте блоки кода в вашем представлении. например:
@using Microsoft.AspNetCore.Identity
@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager
@{
var usr = await UserManager.GetUserAsync(User);
var email = usr?.Email;
}
После того, как вы можете отобразить переменную в вашем представлении
<li class="email">
<label asp-for="userEmail">@email</label>
<input asp-for="userEmail" class="form-control" disabled />
</li>
Лучший способ получить данные для просмотра - это назначить их в контроллере и передать в представление в модели .
Если этот способ вам не подходит - объясните, и мы найдем правильное решение.
Лучший способ и как должна работать реализация MVC: все данные получены с контроллера с использование строго типизированных представлений:
public class HomeController : Controller
{
private readonly UserManager<IdentityUser> _userManager;
public HomeController (UserManager<IdentityUser> manager)
{
_userManager = manager;
}
public async Task<IActionResult> Index()
{
var usr = await _userManager.GetUserAsync(HttpContext.User);
return View(new UserModel { Email = usr?.Email });
}
Где модель:
public class UserModel
{
public string Email { get; set; }
}
Таким образом, вы просто запрашиваете всю информацию, которая вам нужна в действии / индексе контроллера, и передаете ее для просмотра вместе с вашим модель. Это позволяет вам иметь различные файлы назначения. Контроллер для манипулирования данными / бизнес логики Модель просто DTO для передачи значений. Вид, чтобы сделать это. Отметьте это, чтобы получить более подробную информацию: https://docs.microsoft.com/en-us/aspnet/core/mvc/overview?view=aspnetcore-3.1