I have a model like this
public string Name { get; set; } public IEnumerable<int> ProjectMembersId { get; set; }
The property name must be bound using the standard binding code.
But the ProjectMembersId property must be related to using my custom code.
So, I got the class from DefaultModelBinder and redefined the SetProperty method.
protected override void SetProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, System.ComponentModel.PropertyDescriptor propertyDescriptor, object value) { if (propertyDescriptor.Name == "ProjectMembersId") { var list = new List<int>(5); var form = controllerContext.HttpContext.Request.Form; var names = form.AllKeys.Where(x => x.StartsWith("dhxGridObj")); foreach (var name in names) { int i; if (int.TryParse(form.Get(name), out i)) { list.Add(i); } } value = list; } base.SetProperty(controllerContext, bindingContext, propertyDescriptor, value); }
The bad problem is that the SetProperty method is not called because the value provider does not contain an element called ProjectMembersId.
Maybe I'm overriding the wrong part of defaultModelBinder. So what would be the best way?
source share