Сравнивать аннотацию данных для подтверждения пароля несогласованно - PullRequest
0 голосов
/ 20 марта 2020

У меня есть простая форма регистрации, в которой есть подтверждение пароля, где вы просто повторяете пароль, вы знаете детали.

Теперь, чтобы проверить, совпадают ли пароли, я использую аннотацию данных с именем 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;
    }
}
}

Теперь, когда эти пароли не совпадают, будет правильно отображаться сообщение об ошибке, но при попытке отправки оно полностью исчезает. Как я могу это исправить?

РЕДАКТИРОВАТЬ: Я добавлю, что аннотация сравнения является единственной, которая действует таким образом. Если подтверждение пароля слишком короткое, появится соответствующая ошибка, которая не исчезнет после нажатия кнопки подтверждения.

...