如果嵌套组件未正确填写,我需要显示验证消息。该组件由其他父组件使用,并且它们需要获取有关是否存在验证问题的反馈。
我尝试了以下代码来处理嵌套组件并使用CanSubmit
方法。虽然该方法正确地指示是否存在验证问题,但验证消息未显示。
下面的所有代码都可以在blzorrepl上进行测试: https://blazorrepl.com/repl/GvOQlvvv1789ra1G37
@if(editContext != null) {
<EditForm EditContext="@editContext">
<input type="text" @bind="testModel.Name" />
<DataAnnotationsValidator />
<ValidationSummary />
</EditForm>
}
@code {
[Parameter]
public TestModel testModel
{
get { return (TestModel)editContext?.Model; }
set { editContext = new EditContext(value); }
}
EditContext editContext;
public bool CanSubmit()
{
return editContext.Validate();
}
}
这是我的父组件代码,略有缩减但能够重现问题:
<ChildComponent @ref="myTestComponent" testModel="testModel" />
<input type="button" @onclick="buttonClick" value="validate programmatically" />
<div>@testMessage</div>
@code {
TestModel testModel = new TestModel();
ChildComponent myTestComponent;
string testMessage;
void buttonClick()
{
testMessage = "not passed validation";
if (myTestComponent.CanSubmit())
{
testMessage = "passed validation!";
}
}
}
testMessage
仅用于显示验证状态。
我该怎么做才能使父组件导致嵌套组件显示验证消息? 我只能将submit
放在父组件中。
如所请求,这里是我正在进行的更完整的示例,一个可以内联编辑的项目列表以及一个添加更多实例的表单。 https://blazorrepl.com/repl/mlYwlQPm34bekYE824
EditForm
中放置并点击一个submit
输入,我可以显示验证消息。我不明白为什么我应该使用内置组件-它们如何使验证消息开始在这种情况下显示? - jakubiszon<input>
而不是<InputText>
有什么理由吗?从InputBase
继承的组件有许多内置功能,比如验证。如果你改成<InputText @bind-Value="testModel.Name" />
,应该就能正常工作了。请记住,在ValidationSummary
显示内容之前,该字段必须被修改。因此,添加文本、删除文本或者将焦点设置到其他地方都应该触发验证。 - Just the bennoCanSubmit
方法时显示错误消息。将input
更新为InputText
可以在模糊事件上显示验证消息,但是当我按下提交按钮时,该消息再次隐藏。 - jakubiszon