protected ModelBase() { CustomProperties = new CustomPropertiesDictionary(); }
private CustomPropertiesDictionary BindCustomPropertiesDictioary(ControllerContext controllerContext, ModelBindingContext bindingContext) { var model = bindingContext.Model as CustomPropertiesDictionary; if (model == null) { model = new CustomPropertiesDictionary(); } var keys = GetValueProviderKeys(controllerContext, bindingContext.ModelName + "["); if (keys.Count == 0) { return model; } foreach (var key in keys) { var keyName = GetKeyName(key); if (keyName == null || model.ContainsKey(keyName)) continue; var valueBinder = Binders.DefaultBinder; var subPropertyName = GetSubPropertyName(key); if (subPropertyName.IsCaseInsensitiveEqual("__Type__")) continue; if (subPropertyName == null) { var simpleBindingContext = new ModelBindingContext { ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(null, GetValueType(keys, key, bindingContext.ValueProvider)), ModelName = key, ModelState = bindingContext.ModelState, PropertyFilter = bindingContext.PropertyFilter, ValueProvider = bindingContext.ValueProvider }; var value = valueBinder.BindModel(controllerContext, simpleBindingContext); model[keyName] = value; } else { // Is Complex type var modelName = key.Substring(0, key.Length - subPropertyName.Length - 1); var valueType = GetValueType(keys, modelName, bindingContext.ValueProvider); valueBinder = Binders.GetBinder(valueType); var complexBindingContext = new ModelBindingContext { ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(null, valueType), ModelName = key.Substring(0, key.Length - subPropertyName.Length - 1), ModelState = bindingContext.ModelState, PropertyFilter = bindingContext.PropertyFilter, ValueProvider = bindingContext.ValueProvider }; var value = valueBinder.BindModel(controllerContext, complexBindingContext); model[keyName] = value; } } return model; }
private CustomPropertiesDictionary BindCustomPropertiesDictioary(ControllerContext controllerContext, ModelBindingContext bindingContext) { var model = bindingContext.Model as CustomPropertiesDictionary; if (model == null) { model = new CustomPropertiesDictionary(); } var keys = GetValueProviderKeys(controllerContext, bindingContext.ModelName + "["); if (keys.Count == 0) { return(model); } foreach (var key in keys) { var keyName = GetKeyName(key); if (keyName == null || model.ContainsKey(keyName)) { continue; } var valueBinder = Binders.DefaultBinder; var subPropertyName = GetSubPropertyName(key); if (subPropertyName.IsCaseInsensitiveEqual("__Type__")) { continue; } if (subPropertyName == null) { var simpleBindingContext = new ModelBindingContext { ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(null, GetValueType(keys, key, bindingContext.ValueProvider)), ModelName = key, ModelState = bindingContext.ModelState, PropertyFilter = bindingContext.PropertyFilter, ValueProvider = bindingContext.ValueProvider }; var value = valueBinder.BindModel(controllerContext, simpleBindingContext); model[keyName] = value; } else { // Is Complex type var modelName = key.Substring(0, key.Length - subPropertyName.Length - 1); var valueType = GetValueType(keys, modelName, bindingContext.ValueProvider); valueBinder = Binders.GetBinder(valueType); var complexBindingContext = new ModelBindingContext { ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(null, valueType), ModelName = key.Substring(0, key.Length - subPropertyName.Length - 1), ModelState = bindingContext.ModelState, PropertyFilter = bindingContext.PropertyFilter, ValueProvider = bindingContext.ValueProvider }; var value = valueBinder.BindModel(controllerContext, complexBindingContext); model[keyName] = value; } } return(model); }