前言
实现的方式也有其他的方式 可能不是最优 如果有兴趣的可以自己研究 ;
实现思路
1 首先看他们Abp 的官方文档 其中介绍的已经适用于一部分场景
官方文档的三种介绍
1 仅重写页面模型(C#)端执行其他逻辑,不更改UI.
2 仅重写Razor页面(.cshtml文件),不更改逻辑.
3 完全重写 页面.
重写页面 Account Login 页面 默认会覆盖原有的 和逻辑就可以根据这个继承的 MyLoginModel 来 切入
也可以完全重写 可以根据文档上的继承 PageModel,AbpPageModel
重写页面
1 首先在Pages 文件下 新建 Account 文件夹
2 新建Login 页面 和 MyLoginModel
public class MyLoginModel : Volo.Abp.Account.Web.Pages.Account.LoginModel{
public MyLoginModel(IAuthenticationSchemeProvider schemeProvider, IOptions<AbpAccountOptions> accountOptions, IOptions<IdentityOptions> identityOptions) : base(schemeProvider, accountOptions, identityOptions)
{
}
// 这里的拓展空间就挺大的 需要一定的理解才可以重写 就不多介绍了
public async override Task<IActionResult> OnPostAsync(string action){
return base.OnPostAsync(action)
}
}
Login 页面
@page
@using Volo.Abp.AspNetCore.Mvc.UI.Theming
@using Volo.Abp.Account.Settings
@using Volo.Abp.Settings
// 这里指向 你创建的 MyLoginModel
@model xxxxx.Pages.Account.MyLoginModel
@inject Volo.Abp.Settings.ISettingProvider SettingProvider
@inject IThemeManager ThemeManager
@{
//Layout 这里指的是模板页面 有好几种 可以看 也可以是null
Layout = ThemeManager.CurrentTheme.GetAccountLayout(false);
}
<div>
// 这是他默认的表单 需要注意的是需要保证一些js 的引入 重写的话可以直接去掉 然后研究一下源码
<form method="post" id="components-form-demo-normal-login">
<input asp-for="ReturnUrl" />
<input asp-for="ReturnUrlHash" />
<div class="form-group">
<input asp-for="LoginInput.UserNameOrEmailAddress" class="form-control" />
<span asp-validation-for="LoginInput.UserNameOrEmailAddress" class="text-danger"></span>
</div>
<br/>
<br/>
<div class="form-group">
<input asp-for="LoginInput.Password" class="form-control" />
<span asp-validation-for="LoginInput.Password" class="text-danger"></span>
</div>
<abp-button type="submit" button-type="Primary" name="Action" value="Login" class="btn-block btn-lg mt-3">登录</abp-button>
</form>
</div>