这个typeof(TModel)造成了只会更新声明类型中有的属性,把它换成model.GetType()就可以解决问题了,我扩这的这个方法如下
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; } } |
有了这些,当我们想对新表进行编辑和添加时只需要添加相应的Partial编辑视图就可以了,简化了我们的编程工作。
四、缺点
1、须要按照规则命名,比方说Partial视图需要以相应的类名来命名
2、页面引用是弱类型的
.
分页: [
1] [
2] [
3] [
4]
TAG:
ASP.NET MVC