public static class ControllerExtension { /// <summary> /// 更新时是否按照当前类型进行更新 /// </summary> /// <typeparam name="TModel"></typeparam> /// <param name="controller"></param> /// <param name="model"></param> /// <param name="isEx"></param> public static void UpdateModel<TModel>(this Controller controller, TModel model, bool isExtension) where TModel : class { if (isExtension) { Predicate<string> propertyFilter = propertyName => IsPropertyAllowed(propertyName, null, null); IModelBinder binder = ModelBinders.Binders.GetBinder(model.GetType());
ModelBindingContext bindingContext = new ModelBindingContext() { Model = model, ModelName = null, ModelState = controller.ModelState, ModelType = model.GetType(), PropertyFilter = propertyFilter, ValueProvider = controller.ValueProvider }; binder.BindModel(controller.ControllerContext, bindingContext);
} else { throw new Exception("isExtension不能选择false"); } } private static bool IsPropertyAllowed(string propertyName, string[] includeProperties, string[] excludeProperties) { bool includeProperty = (includeProperties == null) || (includeProperties.Length == 0) || includeProperties.Contains(propertyName, StringComparer.OrdinalIgnoreCase); bool excludeProperty = (excludeProperties != null) && excludeProperties.Contains(propertyName, StringComparer.OrdinalIgnoreCase); return includeProperty && !excludeProperty; } } |