protected override void BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor)
        {
            var performValidation = controllerContext.Controller.ValidateRequest &&
                                    bindingContext.ModelMetadata.RequestValidationEnabled;

            var propertyBinderAttribute = propertyDescriptor
                                          .Attributes
                                          .OfType <DataMemberAttribute>()
                                          .FirstOrDefault();

            var modelName = propertyBinderAttribute == null ? bindingContext.ModelName : propertyBinderAttribute.Name;

            var result = performValidation
                ? bindingContext.ValueProvider.GetValue(modelName)
                : bindingContext.GetUnvalidatedValue(modelName);

            if (result == null)
            {
                base.BindProperty(controllerContext, bindingContext, propertyDescriptor);
            }
            else
            {
                propertyDescriptor.SetValue(bindingContext.Model, result.AttemptedValue);
            }
        }