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; }
}
}
我对 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; }
}
}