比对数据注解不一致确认密码

Compare data annotation is inconsistent for confirming password

我有一个简单的注册表单,其中有密码确认,您只需重复密码,您就知道了。

现在检查密码是否相同我使用名为 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;
    }
}
}

现在,只要这些密码不匹配,它就会正确显示错误消息,但是当我尝试提交时,它会完全消失。我该如何解决这个问题?

编辑: 我要补充一点,比较注解是唯一以这种方式起作用的注解。如果密码确认太短,会显示正确的错误,并且在按下提交按钮后不会消失。

从那时起,我更改了数据注释以进行流畅的验证,并且效果很好,错误也消失了,所以我想这是改用流畅验证的另一个原因。