diff --git a/src/Components/Forms/src/EditContext.cs b/src/Components/Forms/src/EditContext.cs index 940781d1cadd..ce5df0948125 100644 --- a/src/Components/Forms/src/EditContext.cs +++ b/src/Components/Forms/src/EditContext.cs @@ -195,6 +195,21 @@ public bool IsModified(in FieldIdentifier fieldIdentifier) public bool IsModified(Expression> accessor) => IsModified(FieldIdentifier.Create(accessor)); + /// + /// Determines whether the specified fields in this has no associated validation messages. + /// + /// True if the field has no associated validation messages after validation; otherwise false. + public bool IsValid(in FieldIdentifier fieldIdentifier) + => !GetValidationMessages(fieldIdentifier).Any(); + + /// + /// Determines whether the specified fields in this has no associated validation messages. + /// + /// Identifies the field whose current validation messages should be returned. + /// True if the field has no associated validation messages after validation; otherwise false. + public bool IsValid(Expression> accessor) + => IsValid(FieldIdentifier.Create(accessor)); + /// /// Validates this . /// diff --git a/src/Components/Forms/src/PublicAPI.Unshipped.txt b/src/Components/Forms/src/PublicAPI.Unshipped.txt index 20d22e152809..3f57b43db466 100644 --- a/src/Components/Forms/src/PublicAPI.Unshipped.txt +++ b/src/Components/Forms/src/PublicAPI.Unshipped.txt @@ -1,3 +1,5 @@ #nullable enable Microsoft.AspNetCore.Components.Forms.EditContext.ShouldUseFieldIdentifiers.get -> bool Microsoft.AspNetCore.Components.Forms.EditContext.ShouldUseFieldIdentifiers.set -> void +Microsoft.AspNetCore.Components.Forms.EditContext.IsValid(in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) -> bool +Microsoft.AspNetCore.Components.Forms.EditContext.IsValid(System.Linq.Expressions.Expression!>! accessor) -> bool diff --git a/src/Components/Forms/test/EditContextTest.cs b/src/Components/Forms/test/EditContextTest.cs index 1c08859c6aba..c11700d14aa3 100644 --- a/src/Components/Forms/test/EditContextTest.cs +++ b/src/Components/Forms/test/EditContextTest.cs @@ -233,6 +233,24 @@ public void RequestsValidationWhenValidateIsCalled() Assert.Equal(new[] { "Some message" }, editContext.GetValidationMessages()); } + [Fact] + public void IsInvalidWithValidationMessagesForSpecifiedField() + { + // Arrange + var editContext = new EditContext(new object()); + var messages = new ValidationMessageStore(editContext); + var fieldOnThisModel1 = editContext.Field("field1"); + var fieldOnThisModel2 = editContext.Field("field2"); + messages.Add( + fieldOnThisModel1, + "Some message"); + + // Assert + Assert.False(editContext.Validate()); + Assert.False(editContext.IsValid(fieldOnThisModel1)); + Assert.True(editContext.IsValid(fieldOnThisModel2)); + } + [Fact] public void LookingUpModel_ThatOverridesGetHashCodeAndEquals_Works() {