asp.net-core 登录视图组件
示例
默认项目模板将创建一个局部视图_LoginPartial.cshtml,其中包含一些逻辑,用于查找用户是否已登录并查找其用户名。
由于视图组件可能更合适(因为涉及逻辑,甚至注入了2个服务),因此以下示例显示了如何将LoginPartial转换为视图组件。
查看组件类
public class LoginViewComponent : ViewComponent { private readonly SignInManager<ApplicationUser> signInManager; private readonly UserManager<ApplicationUser> userManager; public LoginViewComponent(SignInManager<ApplicationUser> signInManager, UserManager<ApplicationUser> userManager) { this.signInManager= signInManager; this.userManager= userManager; } public async Task<IViewComponentResult> InvokeAsync() { if (signInManager.IsSignedIn(this.User as ClaimsPrincipal)) { return View("SignedIn", await userManager.GetUserAsync(this.User as ClaimsPrincipal)); } return View("SignedOut"); } }
登录视图(在〜/Views/Shared/Components/Login/SignedIn.cshtml中)
@model WebApplication1.Models.ApplicationUser <form asp-area="" asp-controller="Account" asp-action="LogOff" method="post" id="logoutForm" class="navbar-right"> <ul class="nav navbar-nav navbar-right"> <li> <a asp-area="" asp-controller="Manage" asp-action="Index" title="Manage">Hello @Model.UserName!</a> </li> <li> <button type="submit" class="btn btn-link navbar-btn navbar-link">Log off</button> </li> </ul> </form>
SignedOut视图(在〜/Views/Shared/Components/Login/SignedOut.cshtml中)
<ul class="nav navbar-nav navbar-right"> <li><a asp-area="" asp-controller="Account" asp-action="Register">Register</a></li> <li><a asp-area="" asp-controller="Account" asp-action="Login">Log in</a></li> </ul>
从_Layout.cshtml调用
@await Component.InvokeAsync("Login")