Example #1
0
 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;
		}
Example #3
0
        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);
        }