此问题可能是由于子组件的状态更改而导致的,因为此更改会触发所有父级组件的重新呈现。这可能会导致EditForm和DataAnnotationsValidator重新验证表单,即使表单没有更改并且未被提交。
要解决此问题,可以在子组件中使用EventCallback,以便在值更改时通知其他组件,而不会产生不必要的重新呈现,从而避免意外的验证。
下面是一个示例代码,其中一个子组件更改状态并使用EventCallback通知另一个子组件:
@code {
Person person = new Person();
[Parameter]
public EventCallback NameChanged { get; set; }
void HandleValidSubmit()
{
// Handle valid submit
}
}
public class Person
{
[Required]
public string Name { get; set; }
[Range(18, 99)]
public int Age { get; set; }
}
public class CustomInput : ComponentBase
{
[Parameter]
public string Value { get; set; }
[Parameter]
public EventCallback OnValueChanged { get; set; }
void HandleValueChanged(ChangeEventArgs args)
{
Value = args.Value?.ToString();
OnValueChanged.InvokeAsync();
}
}
public class CustomInput2 : ComponentBase
{
[Parameter]
public int Value { get; set; }
[Parameter]
public EventCallback ValueChanged { get; set; }
void HandleValueChanged(ChangeEventArgs args)
{
int.TryParse(args.Value?.ToString(), out int newValue);
Value = newValue;
ValueChanged.InvokeAsync(Value);
}
}