protected override object GetPropertyValue(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, IModelBinder propertyBinder) { // First check if request validation is required var shouldPerformRequestValidation = controllerContext.Controller.ValidateRequest && bindingContext.ModelMetadata.RequestValidationEnabled; // Get value var valueProviderResult = bindingContext.GetValueFromValueProvider(shouldPerformRequestValidation); if (valueProviderResult == null) { return(null); } if (propertyDescriptor.PropertyType.GetInterface(typeof(IEnumerable).Name) != null) { //var actualValue = bindingContext.ValueProvider.GetValue(propertyDescriptor.Name); var attemptedValue = valueProviderResult.AttemptedValue; if (!string.IsNullOrWhiteSpace(attemptedValue) && attemptedValue.Contains(",")) { var valueType = propertyDescriptor.PropertyType.GetElementType() ?? propertyDescriptor.PropertyType.GetGenericArguments().FirstOrDefault(); if (valueType != null && valueType.GetInterface(typeof(IConvertible).Name) != null) { var list = (IList)Activator.CreateInstance(typeof(List <>).MakeGenericType(valueType)); foreach (var splitValue in attemptedValue.Split(',')) { if (valueType.IsEnum) { try { list.Add(Enum.Parse(valueType, splitValue)); } catch { // ignored } } else { list.Add(Convert.ChangeType(splitValue, valueType)); } } return(propertyDescriptor.PropertyType.IsArray ? ToArrayMethod.MakeGenericMethod(valueType).Invoke(this, new object[] { list }) : list); } } } return(base.GetPropertyValue(controllerContext, bindingContext, propertyDescriptor, propertyBinder)); }
object IModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { // First check if request validation is required var shouldPerformRequestValidation = controllerContext.Controller.ValidateRequest && bindingContext.ModelMetadata.RequestValidationEnabled; var incomingData = bindingContext.GetValueFromValueProvider(shouldPerformRequestValidation).AttemptedValue; var document = XDocument.Parse(incomingData); return(document); }
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { try { var value = bindingContext.GetValueFromValueProvider(); bindingContext.ModelState.SetModelValue(bindingContext.ModelName, value); var rawValue = (value == null ? null : value.RawValue as string[]) ?? new string[] { }; return(_implicitConversionMethod.Invoke(null, new object[] { rawValue.SingleOrDefault() })); } catch (TargetInvocationException ex) { bindingContext.ModelState.AddModelError(bindingContext.ModelName, ex.InnerException); return(null); } }
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { try { var result = base.BindModel(controllerContext, bindingContext); return(result); } catch (HttpRequestValidationException) { var modelState = new ModelState(); modelState.Errors.Add(string.Format("'{0}' contains invalid characters", bindingContext.ModelMetadata.DisplayName ?? bindingContext.ModelMetadata.PropertyName)); modelState.Value = bindingContext.GetValueFromValueProvider(false); bindingContext.ModelState.Add(bindingContext.ModelName, modelState); } return(null); }
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { // Obey ValidateInput decorator used in Controller actions. // Attribution: http://blogs.taiga.nl/martijn/2011/09/29/custom-model-binders-and-request-validation/ bool shouldPerformRequestValidation = controllerContext.Controller.ValidateRequest && bindingContext.ModelMetadata.RequestValidationEnabled; var valueResult = bindingContext.GetValueFromValueProvider(shouldPerformRequestValidation); //ValueProviderResult valueResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); if (valueResult == null || string.IsNullOrEmpty(valueResult.AttemptedValue)) { return(null); } // Perform trim. string value = valueResult.AttemptedValue.Trim(); // Check for single comma value - some old browser version does this, couldn't figure out which. if (string.Equals(value, ",")) { return(null); } return(value); }