有了TextBox,PasswordBox相对容易多了,就是改个type的事。
@inherits InputBase<string?>
<div class="d-flex">
<label class="control-label w-auto mt-2"><b>@Lable</b></label>
<div style="width:@PasswordWidth">
<input type="password" @bind-value="CurrentValue" @attributes="AdditionalAttributes" class="form-control" disabled="@Disabled" @ref="Element" />
<span class="w-100"><ValidationMessage For="ValueExpression" /></span>
</div>
</div>
public partial class PasswordBox : InputBase<string?>
{
[Parameter]
public string Lable { get; set; } = "密码";
[Parameter]
public string PasswordWidth { get; set; } = "300";
[Parameter]
public bool Disabled { get; set; }
[DisallowNull] public ElementReference? Element { get; protected set; }
protected override void OnParametersSet()
{
base.OnParametersSet();
Lable += ":";
PasswordWidth += "px;";
}
protected override bool TryParseValueFromString(string? value, [MaybeNullWhen(false)] out string? result, [NotNullWhen(false)] out string? validationErrorMessage)
{
result = value;
validationErrorMessage = null;
return true;
}
}
就比如系统登录组件:
@inject IAuthService AuthService
@inject NavigationManager Navigation
<div class="card align-items-center bg-light mt-3" style="width:25rem ">
<div class="card-body my-2">
<EditForm Model="loginModel" OnValidSubmit="SubmitHandler" OnInvalidSubmit="InvalidHandler">
<DataAnnotationsValidator />
<div class="card-text">
<h3 class="text-center">系统登录</h3>
<hr />
</div>
<p class="card-text">
<TextBox Lable="用户账号" @bind-Value="loginModel.UserName" InputWidth="220"/>
</p>
<p class="card-text">
<PasswordBox Lable="用户密码" @bind-Value="loginModel.Password" PasswordWidth="220"/>
</p>
<p class="card-text text-danger">
<h6>@erryString</h6>
</p>
<div class="text-center">
<button class="btn btn-primary w-50" type="submit">登录</button>
</div>
</EditForm>
</div>
</div>
@code {
private LoginDto loginModel = new LoginDto();
private string erryString = "";
private async void SubmitHandler()
{
var result = await AuthService.LoginAsync(loginModel);
if (!result)
{
erryString = "账号或密码错误!";
return;
}
Navigation.NavigateTo("/");
}
private void InvalidHandler()
{
Console.WriteLine($"用户名: {loginModel.UserName} ,密码:{loginModel.Password}");
}
}
效果: