- #2836 Part 1: Use existing property values when recursing in `MutableObjectModelBinder` - remove `ComplexModelDTO` because that indirection made fixing this issue more difficult and doesn't add value - started with an old closed PR (#2241) which did some of this work - correct `MutableObjectModelBinderTest` tests that exercised behaviour that can't occur - the old `dto.Results` dictionary was never incomplete; nor could it contain `null` values Part 2: Change `MutableObjectModelBinder` to pass complex property values into binding system - model binding no longer trounces nodes in the model tree that aren't bound - create model instances less often in `TryUpdateModel` scenarios - refactor `EnsureModel()` to `GetModel()` and use appropriately - reorder logic in `SetProperty()` and `AddToProperty()` to avoid copying to / from the same collection - also cleans up some code duplication nits: - clean up `MutableObjectModelBinderTest` - fix odd line wrappings and indentation - use `nameof()` more - use `string.Empty` more - simplify a couple of `Returns()` expressions - make assertions in `TryUpdateModelIntegrationTest` more readable - no need to work through `ModelStateDictionary.Keys` - also use `Length` instead of `Count()`; test code but we don't need Linq at all in that test class |
||
|---|---|---|
| .. | ||
| Metadata | ||
| Validation | ||
| ArrayModelBinder.cs | ||
| BindNeverAttribute.cs | ||
| BindRequiredAttribute.cs | ||
| BinderTypeBasedModelBinder.cs | ||
| BindingBehavior.cs | ||
| BindingBehaviorAttribute.cs | ||
| BindingSourceModelBinder.cs | ||
| BindingSourceValueProvider.cs | ||
| BodyModelBinder.cs | ||
| ByteArrayModelBinder.cs | ||
| CancellationTokenModelBinder.cs | ||
| CollectionModelBinder.cs | ||
| CompositeModelBinder.cs | ||
| CompositeValueProvider.cs | ||
| DictionaryBasedValueProvider.cs | ||
| DictionaryModelBinder.cs | ||
| ElementalValueProvider.cs | ||
| EmptyModelMetadataProvider.cs | ||
| FormCollectionModelBinder.cs | ||
| FormFileModelBinder.cs | ||
| FormValueProviderFactory.cs | ||
| GenericModelBinder.cs | ||
| HeaderModelBinder.cs | ||
| IBindingSourceValueProvider.cs | ||
| ICollectionModelBinder.cs | ||
| ICompositeModelBinder.cs | ||
| ICompositeValueProviderFactory.cs | ||
| IEnumerableValueProvider.cs | ||
| JQueryFormValueProvider.cs | ||
| JQueryFormValueProviderFactory.cs | ||
| KeyValuePairModelBinder.cs | ||
| ModelExplorerExtensions.cs | ||
| ModelMetadataProviderExtensions.cs | ||
| ModelNames.cs | ||
| MutableObjectModelBinder.cs | ||
| MutableObjectModelBinderContext.cs | ||
| PrefixContainer.cs | ||
| QueryStringValueProviderFactory.cs | ||
| ReadableStringCollectionValueProvider.cs | ||
| RouteValueValueProviderFactory.cs | ||
| ServicesModelBinder.cs | ||
| TypeConverterModelBinder.cs | ||
| TypeMatchModelBinder.cs | ||