Blazor 无法在自定义组件中进行验证

Blazor not working validations in custom component

我对 Blazor 服务器端的自定义组件有点问题。我尝试创建我的自定义 DateTime 组件。当我在 enter 上输入可为 null 时,一切都很好。我填写的姓名和表格仍然有效。当我对日期输入写入无效内容时,它会显示验证正常。但是当我删除无效值验证时隐藏但表单仍然无效。

@inherits InputBase<DateTime?>

<input value="@CurrentValue" @onchange="((v) => OnChange(v))" class="form-control" />
<ValidationMessage TValue="DateTime?" For="@ValueExpression" />


@code {
    public async Task OnChange(ChangeEventArgs changeEventArgs)
    {
        CurrentValueAsString = changeEventArgs.Value?.ToString();
        await Task.CompletedTask;
    }

    protected override bool TryParseValueFromString(string? value, [MaybeNullWhen(false)] out DateTime? result, [NotNullWhen(false)] out string validationErrorMessage)
    {
        if (string.IsNullOrWhiteSpace(value))
        {
            result = Value;
            validationErrorMessage = string.Empty;
            return true;
        }

        if (DateTime.TryParse(value, out DateTime output))
        {
            result = output;
            validationErrorMessage = string.Empty;
            return true;
        }
        else
        {
            result = null;
            validationErrorMessage = "Field hasn't right format";
            return false;
        }   
    }
}

enter image description hereenter image description hereenter image description here

感谢您的帮助。

这是我的组件测试页。它仅在输入包含无效条目时报告验证错误。我看不出有什么问题,所以我假设您的表单有问题???

@page "/"

<PageTitle>Index</PageTitle>

<EditForm EditContext=this.editContext OnInvalidSubmit=this.InvalidSubmit OnValidSubmit=this.ValidSubmit>
    Custom Date: <CustomDate @bind-Value=this.model.Date></CustomDate>
    <ValidationSummary />
    <button class="btn btn-success">Submit </button>
</EditForm>

@code {
    private Model model = new();
    private EditContext? editContext;

    private void InvalidSubmit()
    {
        var c = editContext?.Validate();
        var x = true;
    }

    private void ValidSubmit()
    {
        var c = editContext?.Validate();
        var x = true;
    }

    protected override void OnInitialized()
    {
        editContext = new EditContext(model);
        base.OnInitialized();
    }

    public class Model
    {
        public DateTime? Date { get; set; }
    }
}