【发布时间】:2020-12-14 09:04:42
【问题描述】:
我有一个 Blazor 组件,它包含一个表单输入和一些额外的标记。感谢@enet 的一些出色帮助(请参阅this answer),我现在有了它,如果模型属性的验证失败,<ValidationMessage> 会正确显示消息。
但是,我希望这个<ValidationMessage> 标记被HTML 包围,该标记仅在显示验证消息时出现,即当该属性的验证失败时。我可以通过引入私人bool 来做到这一点,并按如下方式使用它...
@if (_showValidationMsg) {
<div class="input-group-append"><label class="input-group-text has-error" for="@PropertyName">
<ValidationMessage For="@ValueExpression" /></label>
</div>
}
@code {
// other stuff here as well
private bool _showValidationMsg = false;
private async Task OnChanged(ChangeEventArgs cea) {
await ValueChanged.InvokeAsync(cea.Value?.ToString() ?? "");
FieldIdentifier identifier = CascadedEditContext.Field(PropertyName);
CascadedEditContext.NotifyFieldChanged(identifier);
_showValidationMsg = !CascadedEditContext.Validate();
}
}
当组件只有一个输入元素,但我的一个组件有两个输入控件时,这很好用,我想知道哪一个未通过验证,因此我可以显示/隐藏正确的 HTML 位。
有没有办法找出哪些模型属性验证失败?
【问题讨论】:
-
Shalom,您是否意识到只要不触发 OnChanged 方法,ValidationMessage 就会保持不可见,尽管它应该与要求用户输入值的消息一起显示。当您单击“保存”按钮而不在字段中输入值时会发生这种情况。我会想办法解决的……
标签: blazor