我们可以检查Blazor中哪个属性未通过验证吗?
我有一个Blazor组件,它保存一个表单输入和一些额外的标记。多亏@enet(请参阅)提供了一些出色的帮助,我现在拥有了它,这样,如果模型属性的验证失败,我们可以检查Blazor中哪个属性未通过验证吗?,blazor,Blazor,我有一个Blazor组件,它保存一个表单输入和一些额外的标记。多亏@enet(请参阅)提供了一些出色的帮助,我现在拥有了它,这样,如果模型属性的验证失败,将正确显示消息 但是,我想让这个标记被HTML包围,它只在显示验证消息时出现,即当该属性的验证失败时出现。我可以通过引入一个私有的bool,并按如下方式使用它来做到这一点 @if (_showValidationMsg) { <div class="input-group-append">&l
将正确显示消息
但是,我想让这个
标记被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();
}
}
private async Task<bool> CheckValidationFor(ChangeEventArgs cea, EventCallback<string> valueChangedEventCallback, string propertyName) {
await valueChangedEventCallback.InvokeAsync(cea.Value?.ToString() ?? "");
FieldIdentifier identifier = CascadedEditContext.Field(propertyName);
CascadedEditContext.NotifyFieldChanged(identifier);
CascadedEditContext.Validate();
return CascadedEditContext.GetValidationMessages(identifier).Any();
@if(\u showValidationMsg){
}
@代码{
//这里还有其他东西
私有bool\u showValidationMsg=false;
已更改专用异步任务(ChangeEventArgs cea){
wait ValueChanged.InvokeAsync(cea.Value?.ToString()??“”);
FieldIdentifier标识符=CascadedItContext.Field(PropertyName);
CascadedItContext.NotifyFieldChanged(标识符);
_showValidationMsg=!cascadedItContext.Validate();
}
}
当组件只有一个输入元素,但我的一个组件有两个输入控件,我想知道哪一个没有通过验证,这样我就可以显示/隐藏正确的HTML
是否有办法找出哪些模型属性未通过验证?一旦调用了
cascadeditcontext.Validate
(您可以忽略结果,因为您不需要它,请参见下文),然后可以使用GetValidationMessages
获取属性的验证消息。如果没有,它就通过了验证
使用您的代码作为基础,您可以将其包装成一个可重用的方法,如下所示
@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();
}
}
private async Task<bool> CheckValidationFor(ChangeEventArgs cea, EventCallback<string> valueChangedEventCallback, string propertyName) {
await valueChangedEventCallback.InvokeAsync(cea.Value?.ToString() ?? "");
FieldIdentifier identifier = CascadedEditContext.Field(propertyName);
CascadedEditContext.NotifyFieldChanged(identifier);
CascadedEditContext.Validate();
return CascadedEditContext.GetValidationMessages(identifier).Any();
同样地,对于
OnChanged2
谢谢,太棒了!Shalom,您是否意识到,只要OnChanged方法未被激发,ValidationMessage将保持不可见,尽管它应该与要求用户输入值的消息一起显示。当您单击“保存”按钮而不在字段中输入值时,会发生这种情况。我会试着想出一个解决办法。。。