Skip to content

Commit 07ec52b

Browse files
committed
修复 MetadataType 方式继承 IValidateCollection 接口验证后又对其中涉及的属性进行了单独验证,在特定情况下会忽略单独验证的错误提示。#4359
1 parent 3cb9837 commit 07ec52b

File tree

1 file changed

+11
-0
lines changed

1 file changed

+11
-0
lines changed

src/BootstrapBlazor/Components/ValidateForm/ValidateForm.razor.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,8 @@ private void ValidateDataAnnotations(object? value, ValidationContext context, L
426426
? rule.FormatErrorMessage(displayName)
427427
: rule.ErrorMessage;
428428
results.Add(new ValidationResult(errorMessage, new string[] { memberName }));
429+
//从验证通过的字段集合中移除后续验证错误的字段名称。
430+
ValidMemberNames.Remove(memberName);
429431
}
430432
}
431433
}
@@ -508,7 +510,16 @@ private async Task ValidateAsync(IValidateComponent validator, ValidationContext
508510
{
509511
// 自定义验证组件
510512
_tcs = new();
513+
//记录验证前的错误字段名集合。
514+
var oldNames = messages.SelectMany(x => x.MemberNames).ToList();
511515
await validator.ValidatePropertyAsync(propertyValue, context, messages);
516+
//验证后的错误字段名集合。
517+
var newNames = messages.SelectMany(x => x.MemberNames).ToList();
518+
//计算新增的验证错误字段名称集合。
519+
var removeNames = newNames.Where(x => oldNames.Contains(x)).ToArray();
520+
//从验证通过的字段集合内移除后续验证错误的字段名。
521+
foreach (var name in removeNames)
522+
ValidMemberNames.Remove(name);
512523
_tcs.TrySetResult(messages.Count == 0);
513524
}
514525

0 commit comments

Comments
 (0)