首页 > 解决方案 > ASP.net Core Razor 页面中的登录模式

问题描述

我想创建一个带有模式的asp.net核心剃须刀页面(不是MVC)程序,以实现它的一些功能,如登录、忘记密码等。我创建了一个剃须刀页面,用于使用引导模式登录和一个用于前端打开模式的链接和后端的 LoginViewModel 和 RegistrationServices。如何使用此页面访问所有页面中的登录模式?我可以使用局部视图吗?如何?否则,解决方案是什么?这是_登录:

   public class _LoginModel : PageModel
{
    private readonly ICookieAuthenticationService _cookieAuthenticationService;
    private readonly IUserRegistrationService _userRegistrationService;
    private readonly IUserService _userService;

    public _LoginModel(ICookieAuthenticationService cookieAuthenticationService,
        IUserRegistrationService userRegistrationService,
        IUserService userService)
    {
        _cookieAuthenticationService = cookieAuthenticationService;
        _userRegistrationService = userRegistrationService;
        _userService = userService;
    }

    [BindProperty]
    public LoginViewModel LoginViewModel { get; set; }

    [TempData]
    public string ErrorMessage { get; set; }
    
    ...
}

我从 _Login 中删除了 @page 并注入服务并将其用于部分视图:

<partial name="_Login" model="new _LoginModel(cookieAuthenticationService, userRegistrationService, userService, logService)" />

但是由于删除@page,post方法不起作用。

标签: c#asp.net-corepopupbootstrap-modalrazor-pages

解决方案


我想创建一个带有模式的asp.net核心剃须刀页面(不是MVC)程序,以实现它的一些功能,如登录、忘记密码等。

部分页面是没有指令的Razor 标记文件 (.cshtml) @page,但正如您所提到的,如果您@page从 中删除指令_Login.cshtml,这将导致 Razor 页面功能(例如页面处理程序等)不再正常工作。

要实现在模式弹出窗口中显示登录等功能的要求,您可以使用附加的部分页面_LoginPartial.cshtml,并将其发布到_Login处理程序,如下所示。

@model _LoginModel

<div class="row">
    <div class="col-md-4">
        <section>
            <form method="post" asp-page="_Login">
                <h4>Use a local account to log in.</h4>
                <hr />
                <div asp-validation-summary="All" class="text-danger"></div>
                <div class="form-group">
                    <label asp-for="LoginViewModel.Email"></label>
                    <input asp-for="LoginViewModel.Email" class="form-control" />
                    <span asp-validation-for="LoginViewModel.Email" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="LoginViewModel.Password"></label>
                    <input asp-for="LoginViewModel.Password" class="form-control" />
                    <span asp-validation-for="LoginViewModel.Password" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <button type="submit" class="btn btn-primary">Log in</button>
                </div>
            </form>
        </section>
    </div>
</div>

调用_LoginPartial

<partial name="_LoginPartial" model='...

更新:

如何在发布到新页面之前验证输入?诸如空密码或无效用户之类的东西。

客户端验证可以帮助阻止提交,直到表单有效。您可以在视图页面中使用以下代码,这将有助于添加支持客户端验证的所需脚本引用。

@section scripts{ 
    <partial name="_ValidationScriptsPartial" />
}

推荐阅读