У меня есть простая форма регистрации, в которой есть подтверждение пароля, где вы просто повторяете пароль, вы знаете детали.
Теперь, чтобы проверить, совпадают ли пароли, я использую аннотацию данных с именем Compare
[Required(ErrorMessage = "Password is required")]
[MinLength(4, ErrorMessage = "Must be at least 4 characters")]
[DataType(DataType.Password)]
public string Password { get; set; }
[Required(ErrorMessage = "Password confirmation is required")]
[MinLength(4, ErrorMessage = "Must be at least 4 characters")]
[DataType(DataType.Password)]
[Compare(nameof(Password), ErrorMessage = "Passwords should be the same.")]
public string PasswordConfirm { get; set; }
И форма выглядит в основном так:
<EditForm class="form-signin" OnValidSubmit="OnSubmit" Model="registerParameters">
<DataAnnotationsValidator />
<h4 class="font-weight-normal text-center">Create Account</h4>
<label for="inputUsername" class="sr-only">User Name</label>
<InputText id="inputUsername" class="form-control" placeholder="Username" autofocus @bind-Value="@registerParameters.UserName" />
<ValidationMessage For="@(() => registerParameters.UserName)" />
<label for="inputPassword" class="sr-only">Password</label>
<InputText type="password" id="inputPassword" class="form-control" placeholder="Password" @bind-Value="@registerParameters.Password" />
<ValidationMessage For="@(() => registerParameters.Password)" />
<label for="inputPasswordConfirm" class="sr-only">Password Confirmation</label>
<InputText type="password" id="inputPasswordConfirm" class="form-control" placeholder="Password Confirmation" @bind-Value="@registerParameters.PasswordConfirm" />
<ValidationMessage For="@(() => registerParameters.PasswordConfirm)" />
<button class="btn btn-lg btn-primary btn-block" type="submit">Create account</button>
<label class="text-danger">@error</label>
<NavLink href="login">
<h6 class="font-weight-normal text-center">Already have an account? Click here to login</h6>
</NavLink>
</EditForm>
@functions{
RegisterParametersDto registerParameters { get; set; } = new RegisterParametersDto();
dynamic dyn;
string error { get; set; }
async Task OnSubmit()
{
error = null;
try
{
await authStateProvider.Register(registerParameters);
navigationManager.NavigateTo("");
}
catch (Exception ex)
{
dyn = JsonConvert.DeserializeObject(ex.Message);
error = dyn.errorMessage;
}
}
}
Теперь, когда эти пароли не совпадают, будет правильно отображаться сообщение об ошибке, но при попытке отправки оно полностью исчезает. Как я могу это исправить?
РЕДАКТИРОВАТЬ: Я добавлю, что аннотация сравнения является единственной, которая действует таким образом. Если подтверждение пароля слишком короткое, появится соответствующая ошибка, которая не исчезнет после нажатия кнопки подтверждения.