diff --git a/src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/ModelStateDictionary.cs b/src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/ModelStateDictionary.cs index 0f7ceec371..911a643d03 100644 --- a/src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/ModelStateDictionary.cs +++ b/src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/ModelStateDictionary.cs @@ -633,7 +633,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding HasRecordedMaxModelError = false; ErrorCount = 0; _root.Reset(); - _root.ChildNodes.Clear(); + _root.ChildNodes?.Clear(); } /// diff --git a/test/Microsoft.AspNetCore.Mvc.Abstractions.Test/ModelBinding/ModelStateDictionaryTest.cs b/test/Microsoft.AspNetCore.Mvc.Abstractions.Test/ModelBinding/ModelStateDictionaryTest.cs index 26256a07ae..231f444240 100644 --- a/test/Microsoft.AspNetCore.Mvc.Abstractions.Test/ModelBinding/ModelStateDictionaryTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Abstractions.Test/ModelBinding/ModelStateDictionaryTest.cs @@ -125,6 +125,22 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding Assert.Equal(ModelValidationState.Valid, dictionary.ValidationState); } + [Fact] + public void Clear_RemovesAllEntries_IfDictionaryIsEmpty() + { + // Arrange + var dictionary = new ModelStateDictionary(); + + // Act + dictionary.Clear(); + + // Assert + Assert.Equal(0, dictionary.Count); + Assert.Equal(0, dictionary.ErrorCount); + Assert.Empty(dictionary); + Assert.Equal(ModelValidationState.Valid, dictionary.ValidationState); + } + [Fact] public void MarkFieldSkipped_MarksFieldAsSkipped_IfStateIsUnvalidated() {