/* **************************************************************************** * * Copyright (c) Microsoft Corporation. All rights reserved. * * This software is subject to the Microsoft Public License (Ms-PL). * A copy of the license can be found in the license.htm file included * in this distribution. * * You must not remove this notice, or any other, from this software. * * ***************************************************************************/ namespace System.Web.Mvc { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Web.Mvc.Resources; public class ModelBindingContext { private static readonly Predicate _defaultPropertyFilter = _ => true; private string _modelName; private ModelStateDictionary _modelState; private Predicate _propertyFilter; private Dictionary _propertyMetadata; public ModelBindingContext() : this(null) { } // copies certain values that won't change between parent and child objects, // e.g. ValueProvider, ModelState public ModelBindingContext(ModelBindingContext bindingContext) { if (bindingContext != null) { ModelState = bindingContext.ModelState; ValueProvider = bindingContext.ValueProvider; } } public bool FallbackToEmptyPrefix { get; set; } [SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "value", Justification = "Cannot remove setter as that's a breaking change")] public object Model { get { return ModelMetadata.Model; } set { throw new InvalidOperationException(MvcResources.ModelMetadata_PropertyNotSettable); } } public ModelMetadata ModelMetadata { get; set; } public string ModelName { get { if (_modelName == null) { _modelName = String.Empty; } return _modelName; } set { _modelName = value; } } [SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly", Justification = "The containing type is mutable.")] public ModelStateDictionary ModelState { get { if (_modelState == null) { _modelState = new ModelStateDictionary(); } return _modelState; } set { _modelState = value; } } [SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "value", Justification = "Cannot remove setter as that's a breaking change")] public Type ModelType { get { return ModelMetadata.ModelType; } set { throw new InvalidOperationException(MvcResources.ModelMetadata_PropertyNotSettable); } } public Predicate PropertyFilter { get { if (_propertyFilter == null) { _propertyFilter = _defaultPropertyFilter; } return _propertyFilter; } set { _propertyFilter = value; } } public IDictionary PropertyMetadata { get { if (_propertyMetadata == null) { _propertyMetadata = ModelMetadata.Properties.ToDictionary(m => m.PropertyName, StringComparer.OrdinalIgnoreCase); } return _propertyMetadata; } } public IValueProvider ValueProvider { get; set; } } }