protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType) { IXpoController xpoController = controllerContext.Controller as IXpoController; if (xpoController == null) { throw new InvalidOperationException("The controller does not support IXpoController interface"); } XPClassInfo classInfo = xpoController.XpoSession.GetClassInfo(modelType); ModelBindingContext keyPropertyBindingContext = new ModelBindingContext() { ModelMetadata = bindingContext.PropertyMetadata[classInfo.KeyProperty.Name], ModelName = classInfo.KeyProperty.Name, ModelState = bindingContext.ModelState, ValueProvider = bindingContext.ValueProvider }; PropertyDescriptorCollection properties = GetModelProperties(controllerContext, bindingContext); PropertyDescriptor keyProperty = properties.Find(classInfo.KeyProperty.Name, false); IModelBinder keyPropertyBinder = Binders.GetBinder(keyProperty.PropertyType); object keyValue = GetPropertyValue(controllerContext, keyPropertyBindingContext, keyProperty, keyPropertyBinder); if (keyValue == null) { return(classInfo.CreateNewObject(xpoController.XpoSession)); } else { return(xpoController.XpoSession.GetObjectByKey(classInfo, keyValue)); } }
protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType) { IXpoController xpoController = controllerContext.Controller as IXpoController; if (xpoController == null) { throw new InvalidOperationException("The controller does not support IXpoController interface"); } XPClassInfo classInfo = xpoController.XpoSession.GetClassInfo(modelType); ValueProviderResult result = bindingContext.ValueProvider.GetValue(classInfo.KeyProperty.Name); return(result == null?classInfo.CreateNewObject(xpoController.XpoSession) : xpoController.XpoSession.GetObjectByKey(classInfo, result.ConvertTo(classInfo.KeyProperty.MemberType))); }