Example #1
0
        private static ArgumentBinding BindObject(ControllerContext cc, IInvokeableParameter parameter,  string displayName)
        {
            var attributes =  parameter.Attributes.ToArray();
            displayName = displayName ?? parameter.Name.Sentencise(true);

            cc.HttpContext.Request.InputStream.Position = 0; //reset as Json binder will have already read it once

            var valueProvider = ValueProviderFactories.Factories.GetValueProvider(cc);

            var metadata = ModelMetadataProviders.Current.GetMetadataForType(null, parameter.ValueType);
            metadata.DisplayName = displayName;
            ApplyAttributeMetaData(metadata, attributes);
            var bindingContext = new ModelBindingContext
            {
                ModelName = parameter.Name,
                ValueProvider = valueProvider,
                ModelMetadata = metadata,
                ModelState = cc.Controller.ViewData.ModelState
            };

            var binder = ModelBinders.Binders.GetBinder(parameter.ValueType, true);
            var output = binder.BindModel(cc, bindingContext);

            var errors = new List<string>();

            foreach (var va in attributes.OfType<ValidationAttribute>())
            {
                var result = va.GetValidationResult(output,
                    new ValidationContext(parameter.Parent, null, null) {MemberName = parameter.Name});
                if (result != ValidationResult.Success)
                {
                    var formatErrorMessage = va.FormatErrorMessage(parameter.DisplayName);
                    errors.Add(formatErrorMessage);
                    //bindingContext.ModelState.AddModelError(parameter.Name, formatErrorMessage);
                }
            }

            var argumentBinding = new ArgumentBinding()
            {
                Parameter = parameter,
                Value = output,
                Errors = errors
            };
            return argumentBinding;
        }
Example #2
0
 public NotEnoughParametersForNodeMethodException(NodeMethod nodeMethod, IInvokeableParameter parameterInfo, object[] parameters)
 {
     NodeMethod = nodeMethod;
     ParameterInfo = parameterInfo;
     Parameters = parameters;
 }